Docker не может подключиться к открытому контейнеру порту - PullRequest
0 голосов
/ 01 марта 2019

СЦЕНАРИЙ:

Привет, я запускаю docker compose с контейнерами.Этот файл compose работает как charm на локальном рабочем столе docker в Windows 10. Я настроил свою собственную сеть с сетью driver bridge. Теперь я хочу запустить docker compose на внешнем сервере с ubuntu vm.У меня удаленное соединение шпаклевки с сервером.Когда я запускаю docker-compose up, все мои службы запускаются успешно.У меня также работает Portainer для управления графическим интерфейсом.

ПРОБЛЕМА: Лика Я сказал, все мои службы работают.Единственное отличие от моих локальных настроек заключается в том, что я запускаю portainer как один контейнер.Я не могу подключиться к portainer с помощью моего браузера и проверить всю настройку.Но когда я хочу вызвать свой контейнер expose, я не могу получить соединение и получить ошибку соединения не удалось.Когда я смотрю на столбец IP-адресов в portainer в спецификации Containers, я вижу, что у portainer есть другой ip, чем у моих контейнеров составления docker.Таким образом, у portainer 172.17.xxx, а все остальные контейнеры начинаются с 172.20.xxx. Очевидно, что мои открытые порты в моей частной сети не доступны мостовой сети хоста.

Что я ожидаю Я хочу, чтобы мои открытые порты были доступны через ip моей виртуальной машины, как мой экземпляр portainer.

Мысли Я довольно новичок в докере, поэтому я проверил docs и подумал из-за описания:

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

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

Вопрос: Что-то не так, когда я запускаю portainer отдельно от моей композиции?Есть ли что-то еще, что нужно иметь в виду, когда я запускаю свою композицию на внешнем сервере, а не на локальном хосте в точке сетевого взаимодействия?

compsose network cfg:

networks:
  my_net:
    driver: bridge

, и моя составная версия - 2.1

ОБНОВЛЕНИЕ: Docker ps сообщает все о запуске и проверке заражения docker для контейнера, к которому я хочу подключиться через Интернет:

"NetworkSettings": {
            "Bridge": "",
            "SandboxID": "9e1e335ab30f1f4d3f690e8902e06523fa095e7d8bshddkdksis7d66s7sjdjd",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "7778/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "7778"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/9e1e386ttf56",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "my_net": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "3cb72e02c43b",
                        "usermanagement-service"
                    ],

                    "Gateway": "172.20.xx.x",
                    "IPAddress": "172.20.xx.xx",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "DriverOpts": null
                }
            }
        }
    }

1 Ответ

0 голосов
/ 01 марта 2019

Таким образом, проблема может быть разбита на следующие шаги:

  1. Проверьте результаты docker inspect или docker ps, чтобы убедиться, что ваш порт выставлен правильно
  2. Попробуйте подключиться к нему, используя публичный IP.Если вы получили сообщение об ошибке, например

    • Отказ в соединении : Причина может быть в том, что приложение внутри контейнера работает не так, как ожидалось.например, вам нужно убедиться, что приложение привязано к 0.0.0.0, а не к 127.0.0.1

    • Время ожидания подключения : причиной может быть брандмауэр вне сервера, напримерSecurityGroups в AWS или аналогичном или, возможно, докер не управляет брандмауэром сервера (который не является настройкой по умолчанию)

...