Docker сетевой драйвер хоста по-разному работает на ма c и linux - PullRequest
0 голосов
/ 10 апреля 2020

В ОС Ma c, при запуске контейнера nginx, в котором в качестве сетевого драйвера указан хост, а затем выполняется команда curl на хосте MA C ОС. Я НЕ МОГУ ДОСТУПИТЬ к службе, доступной на порту 80 хоста. С другой стороны, при выполнении команды curl из другого контейнера с использованием хоста в качестве сетевого драйвера, я также в состоянии получить доступ к службе nginx, доступной на порту 80 хоста:

MACHOST:~ user$ docker run -d --network host --name custom-nginx nginx
1157db8de59a5d6c1f16195bd31a395c171b3ce864cd85542b47620ba87efe05
MACHOST:~ user$ curl -s -o /dev/null -I -sw "%{http_code}\n" http://localhost:80
000
MACHOST:~ user$ docker run --rm --network host curlimages/curl curl -s -o /dev/null -I -sw "%{http_code}\n" http://localhost:80
200

Я уверен, что ожидаемое поведение является следующим, которое я получаю при выполнении того же сценария команд на хосте debian:

cloud_user@debian-instance-2:~$ docker run -d --network host --name custom-nginx nginx
905c905533f8ff8fcab45db05ec1e04545b3357e6ee463f7855da146ccee155f
cloud_user@debian-instance-2:~$ curl -s -o /dev/null -I -sw "%{http_code}\n" http://localhost:80
200
cloud_user@debian-instance-2:~$ docker run --rm --network host curlimages/curl curl -s -o /dev/null -I -sw "%{http_code}\n" http://localhost:80
200

Любой намек на то, что происходит?

1 Ответ

0 голосов
/ 10 апреля 2020

Docker Рабочий стол на Ma c запускает демон docker в виртуализированной ОС. [Ссылка: https://docs.docker.com/docker-for-mac/docker-toolbox/]

При выполнении docker run --network host ... он подключается к портам на хост-машине, которая является виртуальной машиной, а не MACHOST (физической машиной). Таким образом, контейнер custom- nginx виден из контейнера на основе образа curlimages / curl , так как они оба работают на одной виртуальной хост-машине (ВМ). [Ссылка: https://github.com/docker/for-mac/issues/2716]

...