Доступ к хост-машине в Docker Container в Ubuntu 18.04 - PullRequest
0 голосов
/ 09 декабря 2018

Я ищу способ подключения к моей хост-машине в Docker-контейнере (в моем случае доступ к определенному порту для использования прокси в контейнере приложения).

Я пытался network_mode: "host"(или docker run --network="host"), он работал в случае доступа к локальной машине, но вызывал некоторые другие проблемы, связанные с изменением сетевого драйвера на host:

SQLSTATE [HY000] [2002] php_network_getaddresses: getaddrinfo fail: Имя или служба неизвестна.

Также я не могу использовать ifconfig для определения сетевого псевдонима, так как я использую Ubuntu 18.04.

Что мне делать?

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Вы можете использовать extra_hosts в вашем docker-compose, что вы и открыли сами.Я просто хотел добавить другой способ, когда вы работаете в локальной среде.

В Docker-for-Mac и Docker-for-windows , внутри контейнераDNS-имя host.docker.internal преобразуется в IP-адрес, позволяющий получить сетевой доступ к хосту.

Вот соответствующее описание, извлеченное из документации :

хост имеет изменяющийся IP-адрес (или ни одного, если у вас нет доступа к сети).Начиная с 18.03, мы рекомендуем подключаться к специальному DNS-имени host.docker.internal, который разрешает внутренний IP-адрес, используемый хостом.Это для целей разработки и не будет работать в производственной среде за пределами Docker для Windows.

На github есть открытая проблема , касающаяся реализации этой функции для докер-для-Linux .

0 голосов
/ 09 декабря 2018

Поработав за день, наконец-то нашел решение.Это можно сделать с помощью - флага add-host в команде docker run или extra_hosts в файле docker-compose.yml с созданиемпсевдоним для локального (lo | 127.0.0.1) сетевого интерфейса.

Итак, вот инструкция:

  1. Сначала создайте псевдоним для интерфейса lo.Как вы, возможно, знаете, команда ifconfig не существует в Ubuntu 18.04, поэтому мы делаем это так:

sudo ip addr add 192.168.0.20/24 dev lo label lo:1

Затем наденьте это на себя docker-compose.yml file:

extra_hosts: - "otherhost:192.168.0.20"

Если вы не с помощью Docker Compose вы можете добавить хост в контейнер с помощью флага --add-host.Что-то вроде docker run container-name --add-host="otherhost:192.168.0.20"

Наконец, когда вы закончите с вышеуказанными шагами, перезапустите ваши контейнеры с помощью docker-compose down && docker-compose up -d или docker-compose restart

Теперь вы можете войти в свой контейнер (docker-compose exec container-name bash) ипроверьте его.

ПРИМЕЧАНИЕ : Убедитесь, что ваш рабочий порт открыт с помощью команды telnet [interface-ip] [port].

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