Как сказать докеру на Mac использовать хост-сеть для всех целей?

Как указать докеру на Mac использовать хост-сеть для всех целей, чтобы мой контейнер докеров мог подключаться к любой службе, работающей на хост-компьютере, через локальный хост или 127.0.0.1?

Запустил docker run --net=host -it myimage, и контейнер не может подключиться к чему-либо, работающему на хост-компьютере, через локальный хост. Я получаю сообщение об отказе в соединении.

docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:13:02 2018
 OS/Arch:      darwin/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:22:38 2018
  OS/Arch:      linux/amd64
  Experimental: true

person user1870400    schedule 14.06.2018    source источник


Ответы (2)


Сетевой драйвер хоста будет работать в Linux так, как вы ожидаете, но он не даст вам того, что вы ищете на Mac и Windows.

Это упоминается здесь в официальных документах: https://docs.docker.com/network/network-tutorial-host/.

Сетевой драйвер хоста работает только на хостах Linux и не поддерживается в Docker для Mac, Docker для Windows или Docker EE для Windows Server.

Вы можете запустить свои контейнеры с --network host на Mac без ошибок, но вы не получите ожидаемых результатов.

Причина этого в том, что приложения Docker для Mac и Windows используют виртуальную машину под капотом, а «хост» в данном случае означает виртуальную машину, а не вашу хост-машину.

Если вам интересно, реализует ли Docker это на Mac и Windows, следуйте этому выпуску https://github.com/docker/for-mac/issues/2716.

Вы можете узнать больше об этой теме на форумах Docker здесь и здесь .

Чтобы завершить картину:

  • если вы разрабатываете обычное веб-приложение, используйте -p или лучше изучить пользовательские сети, docker-compose и Swarm или Kubernetes, чтобы вы создавали свое приложение с учетом конечной цели.
  • если вы находитесь в особой ситуации и по какой-либо причине будете развертывать свое приложение с --network host в рабочей среде, лучше всего разрабатывать его на компьютере с Linux.
person takacsmark    schedule 14.06.2018

Сетевая функция Docker не поддерживается на Mac, и, что интересно, команда запуска docker не жалуется на это.

Итак, с хоста, если вы попытаетесь использовать localhost:port, например. nginx на порту 80, вы получите сообщение об ошибке, которое будет работать и в Linux.

Mac будет иметь следующую ошибку:

$ curl localhost:80
curl: (7) Failed to connect to localhost port 80: Connection refused
person Deepak Singhvi    schedule 12.10.2020