are*_*vur 28 ip docker dockerfile docker-build
我在CentOS docker主机上有一个CentOS docker容器.当我使用此命令运行docker镜像时docker run -d --net=host -p 8777:8777 ceilometer:1.x,docker容器获取主机的IP,但没有为其分配端口.
如果我在没有"--net = host"的情况下运行相同的命令,则docker会docker run -d -p 8777:8777 ceilometer:1.x公开端口但使用不同的IP.docker版本是1.10.1.我希望docker容器与暴露端口的主机具有相同的IP.我也在Dockerfile指令中提到EXPOSE 8777但在docker run命令中提到"--net = host"时没有用.
dne*_*hin 22
docker版本是1.10.1.我希望docker容器与暴露端口的主机具有相同的ip.
使用--net=host它时告诉容器使用主机网络堆栈.因此,您无法将端口暴露给主机,因为它是主机(就网络堆栈而言).
docker inspect 可能不会显示公开端口,但如果您有一个应用程序在端口上侦听,它将像在主机上运行一样可用.
Sha*_*non 20
这个答案让我感到困惑。显然我的docker映像应该在端口8080上可以访问。但事实并非如此。然后我读
https://docs.docker.com/network/host/
报价
主机网络驱动程序仅在Linux主机上有效,而Mac的Docker,Windows的Docker或Windows Server的Docker EE不支持该主机网络驱动程序。
当我在Mac上时,这很烦人。docker命令应该报告错误,而不是让我认为它应该工作。
讨论为何不报告错误
https://github.com/docker/for-mac/issues/2716
不确定我是否相信。
rjd*_*olb 18
在 Linux 上,我总是在需要--net=host时使用myapp连接到另一个托管 PostgreSQL 的 docker 容器。
myappDATABASE在此示例中读取环境变量
就像Shane提到的那样,这在 MacOS 或 Windows 上不起作用......
docker run -d -p 127.0.0.1:5432:5432 postgres:latest
Run Code Online (Sandbox Code Playgroud)
所以我的应用程序无法连接到我的其他 docker 容器:
docker run -e DATABASE=127.0.0.1:5432 --net=host myapp
Run Code Online (Sandbox Code Playgroud)
要解决此问题,您可以使用host.docker.internal而不是127.0.0.1解析您的主机 IP 地址。
因此,这有效
docker run -e DATABASE=host.docker.internal:5432 -d myapp
Run Code Online (Sandbox Code Playgroud)
希望这可以节省某人的时间!
| 归档时间: |
|
| 查看次数: |
18450 次 |
| 最近记录: |