我在 CentOS docker 主机上有一个 CentOS docker 容器。当我使用此命令运行 docker 映像时
docker run -d --net=host -p 8777:8777 ceilometer:1.x
docker 容器获取主机的 IP,但没有分配给它的端口。
如果我在没有“--net=host”的情况下运行相同的命令
docker run -d -p 8777:8777 ceilometer:1.x
docker会公开端口但具有不同的IP。 docker版本是1.10.1。我希望 docker 容器与主机具有相同的 IP,并暴露端口。我还在 Dockerfile
中提到了指令 EXPOSE 8777
但在 docker run
命令中提到“--net=host”时没有用。
我对这个答案感到困惑。显然我的 docker 镜像应该可以通过端口 8080 访问。但事实并非如此。然后我就读了
https://docs.docker.com/network/host/
引用
主机网络驱动程序仅适用于 Linux 主机,Docker for Mac、Docker for Windows 或 Docker EE for Windows Server 不支持。
这很烦人,因为我使用的是 Mac。 docker 命令应该报告错误,而不是让我认为它应该起作用。
讨论为什么不报错
https://github.com/docker/for-mac/issues/2716
不确定我是否相信。
docker版本是1.10.1。我希望 docker 容器与主机具有相同的 IP,并暴露端口。
当您使用
--net=host
时,它会告诉容器使用主机网络堆栈。因此,您不能将端口暴露给主机,因为它就是主机(就网络堆栈而言)。
docker inspect
可能不会显示公开端口,但如果您有一个应用程序正在侦听端口,则它将像在主机上运行一样可用。
在 Linux 上,当
--net=host
myapp
。
myapp
在此示例中读取环境变量 DATABASE
就像Shane 提到这在 MacOS 或 Windows 上不起作用......
docker run -d -p 127.0.0.1:5432:5432 postgres:latest
所以我的应用程序无法连接到我的其他 docker 容器:
docker run -e DATABASE=127.0.0.1:5432 --net=host myapp
要解决此问题,您可以使用 host.docker.internal
而不是 127.0.0.1
来解析您的主机 IP 地址。
因此,这是有效的
docker run -e DATABASE=host.docker.internal:5432 -d myapp
希望这可以节省某人的时间!
https://docs.docker.com/network/drivers/host/