docker - 如何告诉 Mac 上的 docker 出于所有目的使用主机网络?
问题描述
如何告诉 Mac 上的 docker 将主机网络用于所有目的,以便我的 docker 容器可以通过 localhost 或 127.0.0.1 连接到主机上运行的任何服务?
Randocker run --net=host -it myimage
和容器无法通过 localhost 连接到主机上运行的任何东西。我收到连接被拒绝错误。
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
解决方案
主机网络驱动程序将以您期望的方式在 Linux 上运行,但它不会为您提供您在 Mac 和 Windows 上寻找的内容。
它在官方文档中提到:https ://docs.docker.com/network/network-tutorial-host/ 。
主机网络驱动程序仅适用于 Linux 主机,不支持 Docker for Mac、Docker for Windows 或 Docker EE for Windows Server。
您可以--network host
在 Mac 上启动容器而不会出现错误,但不会得到您期望的结果。
这背后的原因是 Docker for Mac 和 Windows 应用程序在后台使用虚拟机,而“主机”在这种情况下是指 VM,而不是您的主机。
如果您想知道 Docker 是否会在 Mac 和 Windows 上实现此功能,请关注此问题https://github.com/docker/for-mac/issues/2716。
您可以在此处和此处的 Docker 论坛上阅读有关该主题的更多信息。
完成图片:
- 如果您正在开发常规的 Web 应用程序,请使用 -p 或者最好查看用户定义的网络、docker-compose 和 Swarm 或 Kubernetes,以便您在构建应用程序时牢记目标。
- 如果您处于特殊情况,并且出于任何原因将使用 --network host 在生产中部署您的应用程序,最好在 Linux 机器上进行开发。
推荐阅读
- python - NameError:未定义名称“uname”:带有 LINUX 的 PYTHON
- mongodb - TypeError:无法读取未定义的属性“推送”,其中项目实际被推送
- linux - 在 Linux 中是否有一个标准调用来将路径名解析为 inode?
- ios - SCLAlertView showWaiting 警报后如何重定向到主页?
- javascript - 加载资源失败:服务器响应状态为 500(内部服务器错误) - 无法发布数据表格
- javascript - 切换单击选择标签 - 反应
- python - TensorFlow 如何使用 TensorFlow 从 CSV 文件制作分类器?
- ios - 如何在iOS中以RTL语言默认显示最右边的UICollectionViewCell
- c++ - 如何使用 OpenGL 和 Qt 移动场景视图?
- asp.net - jenkins 部署后 15 分钟后回收应用程序池