2016-12-05 3 views
0

Что может быть причиной Docker контейнеров не в состоянии подключиться через порты к хост-системе?Docker: как открыть порты на главной машине?

В частности, я пытаюсь подключиться к серверу MySQL, который запущен на главной машине Docker (172.17.0.1 на мосту Докер). Однако по какой-то причине порт 3306 всегда закрыт.

Шаги по воспроизведению довольно просты:

  1. Настройка MySQL (или любой другой сервис) для прослушивания 0.0.0.0 (bind-address=0.0.0.0 в ~/.my.cnf)
  2. перспективе

    $ docker run -it alpine sh 
    # apk add --update nmap 
    # nmap -p 3306 172.17.0.1 
    

Это Это. Независимо от того, что я делаю это всегда будет показывать

PORT  STATE SERVICE 
3306/tcp closed mysql 

Я пробовал то же самое с Ubuntu образ, хост-машине Windows, и другие порты, а также.

Я хотел бы избежать --net=host, если это возможно, просто для правильного использования контейнеризации.

+0

Посмотрите на этот ответ: http://stackoverflow.com/a/24326540/645002 Он очень тщательный, должен получить вас, где вам нужно быть – jaxxstorm

+0

@Frap Да, это отличный ответ, а также где я получил большинство информации о том, как использовать режим моста и получить IP-адрес хоста и т. д. Но, к сожалению, это не помогло с этой проблемой. – Opossum

+0

Без полностью borking автоматического моста настройки по докер (предполагая, что вы не Iptables мазохист), и за исключением --net = хост ..... Передайте записи пользовательских Dns для хоста через --add-хозяина. – user2105103

ответ

0

Оказывается, что IP-адрес не был правильным. Ничто не блокировало порты, и службы тоже работали нормально. ping и nmap показали IP как онлайн, но по какой-то причине это была не хост-система.

урок: не полагаться на route в контейнере, чтобы вернуть правильный адрес хоста. Вместо того, чтобы проверить ifconfig или ipconfig на хосте Linux или Windows, соответственно, и передать этот IP-адрес с помощью переменных окружения.

Прямо сейчас я перехожу к использованию docker-compose и поместил все необходимые службы в контейнеры, поэтому хост-систему не нужно вмешиваться, и я могу просто полагаться на DNS Docker. Это гораздо более удовлетворительно.

Смежные вопросы