Docker: requests between containers in one network

I have 2 containers - backend & frontend. I run them on remote server with this commands:

docker run -p 3000:3000 xpendence/api-checker:0.0.1
docker run -p 8099:8099 --name rebounder-backend-0017a xpendence/rebounder-chain-backend:0.0.17

As documentation says, containers connect to 'bridge' network by default. And I see this containers inside there:

# docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "27f9d6240b4022b6ccbfff93daeff32d2639aa22f7f2a19c9cbc21ce77b435",
        "Created": "2019-05-12T12:26:35.903309613Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "82446be7a9254c79264d921059129711f150a43ac412700cdc21eb5312522ea4": {
                "Name": "rebounder-backend-0017a",
                "EndpointID": "41fb5be38cff7f052ebbbb9d31ee7b877f664bb620b3063e57cd87cc6c7ef5c9",
                "MacAddress": "03:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "da82a03c5d3bfe26cbd750da7f8872cf22dc9d43117123b9069e9ab4e17dbce6": {
                "Name": "elastic_galileo",
                "EndpointID": "13878a6db60ef854dcbdf6b7e729817a1d96fbec6364d0c18d7845fcbc040222",
                "MacAddress": "03:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }

I send requests from frontend to backend, but they not reach it:

GET http://localhost:8099/log net::ERR_CONNECTION_REFUSED
GET http://172.17.0.2:8099/log net::ERR_ADDRESS_UNREACHABLE
GET http://172.17.0.2/16:8099/log net::ERR_ADDRESS_UNREACHABLE
GET http://0.0.0.0:8099/log net::ERR_CONNECTION_REFUSED

Please give me advice, how to solve problem?

Requests to backend from outside are ok.

Upvotes: 2

Views: 1080

Answers (1)

atline
atline

Reputation: 31574

Although your two containers link to the same default bridge, but this doesn't mean they can visit each other.

In the past, we suggest to use --link to make container directly talk to each other without the host participate, but now this is deprecated.

Instead, you need to use user-defined bridge.

  • Containers connected to the same user-defined bridge network automatically expose all ports to each other.
  • User-defined bridges provide automatic DNS resolution between containers.

Steps as follows:

docker network create my-net
docker run --network my-net -p 3000:3000 xpendence/api-checker:0.0.1
docker run --network my-net -p 8099:8099 --name rebounder-backend-0017a xpendence/rebounder-chain-backend:0.0.17

Detail references to official guide

Upvotes: 4

Related Questions