首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker run "--publish“和"--publish-all”之间的交互是什么?

docker run "--publish“和"--publish-all”之间的交互是什么?
EN

Stack Overflow用户
提问于 2019-07-16 19:27:44
回答 1查看 1K关注 0票数 3

我找不到这个文档。假设我想要将一个端口发布到一个已知的位置,但有时会发布所有其他“公开”的端口以进行调试或测试。

一个简单的Dockerfile

代码语言:javascript
复制
FROM alpine
CMD /bin/sleep 600

--publish/-p允许我将特定的主机端口绑定到容器端口。--publish- all /-P将所有容器端口绑定到随机端口,可以使用例如docker ps找到这些端口。

代码语言:javascript
复制
$ docker build -t foo .
<build prints>
$ docker run -d -p 8000:8000 -P -p 9000:9000 foo
<some id prints>
$ docker ps --format '{{.Command}} {{.Ports}}'
"/bin/sh -c '/bin/sl…" 0.0.0.0:8000->8000/tcp, 0.0.0.0:9000->9000/tcp

但是假设我有一个这样的Dockerfile,并将一个端口发布到一个已知端口,而将其余端口发布到随机分配的端口。

代码语言:javascript
复制
FROM alpine
EXPOSE 8000
# Various management ports or something
EXPOSE 8005
EXPOSE 8443
EXPOSE 8009
CMD /bin/sleep 600

定义的行为是什么?

代码语言:javascript
复制
$ docker run -d -P -p 8000:8000 foo
EN

回答 1

Stack Overflow用户

发布于 2019-07-16 19:27:44

这样做,行为似乎是“如预期的”。显式端口绑定优先于--publish-all,与标志出现的位置无关。在上面的示例中,结果是

代码语言:javascript
复制
$ docker ps --format '{{.Command}} {{.Ports}}'
"/bin/sh -c '/bin/sl…" 0.0.0.0:8000->8000/tcp, 0.0.0.0:32792->8005/tcp, 0.0.0.0:32791->8009/tcp, 0.0.0.0:32790->8443/tcp

显式请求的端口绑定发生,并且其他端口被绑定到os分配的未使用的端口。

它还澄清了一些我不理解的东西。我总是忽略"EXPOSE“,因为文档基本上说它实际上除了作为文档之外什么也不做,而要真正”公开“一个端口,你应该显式地发布它。但--publish-all确实使用了暴露的端口。我天真地认为,通过执行--publish-all,它将发布我启动的进程正在侦听的所有端口,但这些端口是在容器初始化后打开的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57056217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档