From 2ab7f09b15a41b1e8d2f4bba85364c10a1e0a4e5 Mon Sep 17 00:00:00 2001 From: Sebastian Detering <98575184+TimeTravelerFromNow@users.noreply.github.com> Date: Thu, 21 Nov 2024 18:47:33 -0800 Subject: [PATCH] Networking container-container communication Specifies how to communicate between containers, clarifying DNS resolution only works this way between compose services --- content/manuals/compose/how-tos/networking.md | 10 +++++++++- content/manuals/engine/network/drivers/bridge.md | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/content/manuals/compose/how-tos/networking.md b/content/manuals/compose/how-tos/networking.md index bea3c4004d7..9fa266a5144 100644 --- a/content/manuals/compose/how-tos/networking.md +++ b/content/manuals/compose/how-tos/networking.md @@ -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. @@ -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: diff --git a/content/manuals/engine/network/drivers/bridge.md b/content/manuals/engine/network/drivers/bridge.md index 4f0b3268d36..7d6ac48cd8f 100644 --- a/content/manuals/engine/network/drivers/bridge.md +++ b/content/manuals/engine/network/drivers/bridge.md @@ -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