Что localhost означает внутри контейнера Docker? - PullRequest
0 голосов
/ 10 мая 2018

Скажите, если я использую эту команду внутри контейнера докера.

/opt/lampp/bin/mysql -h localhost -u root -pThePassword

На что здесь ссылается localhost?IP-адрес хост-машины или собственный IP-адрес док-контейнера?

Ответы [ 2 ]

0 голосов
/ 04 августа 2018

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

Из оболочки вашей хост-системы , localhost может относиться к работающим демонамв вашей системе за пределами Docker или для портов, которые вы опубликовали с опциями docker run -p.

Из другой системы , localhost относится к системе, из которой вызывается.

С точки зрения IP-адресов , localhost всегда равно 127.0.0.1, и этот IP-адрес является специальным, всегда localhost и ведет себя так же, как указано выше.


Если вы хотите установить соединение с контейнером ...

... из другого контейнера , лучший способ - убедиться, что они 'Вы находитесь в той же сети Docker (вы запустили их из того же YAML-файла Docker Compose; вы сделали docker network create, а затем docker run --net ... в той же сети) и используете внутреннюю службу DNS Docker для обращения к ним по * 1034 контейнера* или его имя в файле YAML Docker Compose и номер портавнутри контейнера.Даже если у цели есть опубликованный порт с параметром docker run -p или параметром Docker Compose ports:, используйте номер порта second (внутренний контейнер).

...вне пространства Docker , убедитесь, что вы запустили контейнер с параметром docker run -p или Docker Compose ports:, и подключитесь к IP-адресу хоста или DNS-имени, используя первый номер порта изэта опция.

... из окна терминала или браузера на том же физическом хосте , а не в контейнере, в этом случае и только в этом случае localhost будет работать согласованно.


Кроме:

Если вы запустили контейнер с --net host, localhost относится к физическому хосту, и вы находитесь в "сценарий «окно терминала на том же физическом хосте».

Если вы старались использовать несколько серверов в одном контейнере, вы можете использовать localhost для связи между ними.

Если вы работаете в Kubernetes, и у вас есть несколько контейнеров вмне, вы можете использовать localhost для общения между ними.Между модулями необходимо настроить службу перед каждым модулем / развертыванием и использовать DNS-имена в форме service-name.namespace-name.svc.cluster.local.

.
0 голосов
/ 11 мая 2018

Определенно, это будет ваш контейнер, если вы запускаете команду в контейнере.

/opt/lampp/bin/mysql -h localhost -u root -pThePassword

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

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