Skip to content

Commit

Permalink
Networking container-container communication
Browse files Browse the repository at this point in the history
Specifies how to communicate between containers, clarifying DNS resolution only works this way between compose services
  • Loading branch information
TimeTravelerFromNow committed Jan 9, 2025
1 parent aa68ba2 commit 4b885be
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 1 deletion.
10 changes: 9 additions & 1 deletion content/manuals/compose/how-tos/networking.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,14 @@ Within the `web` container, your connection string to `db` would look like
`postgres://db:5432`, and from the host machine, the connection string would
look like `postgres://{DOCKER_IP}:8001` for example `postgres://localhost:8001` if your container is running locally.

## Container to container communication

Those familiar with using `http://localhost:3000` to reference a local development URL, use `http://servicename:3000` instead when using docker compose.

Example: In local development you have a frontend node app running at `http://localhost:3000` which references a backend api running at `http://localhost:8080/api`. In Docker networking, you would replace the node app api reference to the backend api with `http://apiservice:8080/api`. Similarly, the frontend app would be referenced by service name `http://myapp:3000`

This DNS resolution only works between compose services. For example, if you would like to view your node frontend app in your browser running at container port 80 and host port 3000, you would still need to publish the port from the container to the host then you can view the node app at `http://localhost:3000`.

## Update containers on the network

If you make a configuration change to a service and run `docker compose up` to update it, the old container is removed and the new one joins the network under a different IP address but the same name. Running containers can look up that name and connect to the new address, but the old address stops working.
Expand Down Expand Up @@ -178,7 +186,7 @@ networks:

Instead of attempting to create a network called `[projectname]_default`, Compose looks for a network called `my-pre-existing-network` and connects your app's containers to it.

## Further reference information
## Further reference information

For full details of the network configuration options available, see the following references:

Expand Down
2 changes: 2 additions & 0 deletions content/manuals/engine/network/drivers/bridge.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ network.**

- **User-defined bridges provide automatic DNS resolution between containers**.

> **See also**: Learn how to communicate between containers by name (containername:port instead of localhost:port) in: [Container to container communication in Docker Compose](/manuals/compose/how-tos/networking.md#container-to-container-communication).
Containers on the default bridge network can only access each other by IP
addresses, unless you use the [`--link` option](../links.md), which is
considered legacy. On a user-defined bridge network, containers can resolve
Expand Down

0 comments on commit 4b885be

Please sign in to comment.