Docker для Windows (и Docker для Ma c) использует виртуальную машину с ядром Linux для обеспечения среды выполнения для контейнеров linux.
Это означает, что Контейнеры работают на отдельном хосте (с другим именем и IP-адресом), чем ваш windows хост, как описано ниже на иллюстрации ниже
|--------------------------------------------------------|
| Windows host |----------------------------------| |
| | Docker VM | |
| docker cli | |-------------| |-------------| | |
| | | ContainerA | | ContainerB | | |
| | | | | | | |
| | |-------------| |-------------| | |
| |----------------------------------| |
|--------------------------------------------------------|
* * * * * * * * docker cli работает на windows, но все контейнеры работают внутри Docker VM.
При запуске команды docker run --rm -it --name containerA -p 45678:45678 ubuntu:14.04 bash
порт 45678 на виртуальной машине Docker перенаправляется на порт 45678 в контейнере A.
Кроме того, CLI Docker обеспечивает переадресацию порта 45678 на хосте windows на виртуальную машину Docker. Результатом этого является то, что когда вы используете localhost:45678
или <my-windows-hostname>:45678
с вашего windows компьютера, вы окажетесь в контейнере по цепочке:
<my-windows-hostname>:45678 -> <docker VM>:45678 -> ContainerA:45678
То, что вы пытаетесь сделать, это получить доступ к другому контейнеру через опубликованный порт из другого контейнера , а не хоста windows. Для этого вам потребуется внутреннее имя хоста или IP-адрес виртуальной машины Docker, а не хост windows. Это то, что вы можете использовать host.docker.internal
для.
Из Docker для Windows Документация
Хост имеет изменяемый IP-адрес ( или нет, если у вас нет доступа к сети). Начиная с 18.03, мы рекомендуем подключаться к специальному DNS-имени хоста. docker .internal, который разрешает внутренний IP-адрес, используемый хостом.
Это для целей разработки и не будет работать в производственной среде за пределами Docker Desktop для Windows.