Внутри контейнера , 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
.
.