Docker: запросы между контейнерами в одной сети - PullRequest
1 голос

У меня есть 2 контейнера - backend и frontend.Я запускаю их на удаленном сервере с помощью следующих команд:

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

Как указано в документации, контейнеры по умолчанию подключаются к «мостовой» сети.И внутри я вижу следующие контейнеры:

# 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": {}
    }

Я отправляю запросы из внешнего интерфейса в бэкэнд, но они не достигают его:

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

Пожалуйста, дайте мне совет, как решить проблему?

Запросы к бэкенду извне в порядке.

1 Ответ

2 голосов
/ 16 мая 2019

Хотя ваши два контейнера связаны с одним мостом по умолчанию, но это не означает, что они могут посещать друг друга.

В прошлом мы предлагали использовать --link, чтобы контейнер напрямую общался с каждымдругие без участия хоста, но теперь это устарело.

Вместо этого вам нужно использовать user-defined bridge.

  • Контейнеры, подключенные к одной и той же пользовательской мостовой сети, автоматически выставляют всепорты друг другу.
  • Определяемые пользователем мосты обеспечивают автоматическое разрешение DNS между контейнерами.

Шаги в следующем порядке:

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

Подробные ссылки на Официальное руководство

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...