为什么我需要“我需要”--揭露;Docker中的选项?
我对Docker中的“-expose”选项感到困惑,我不知道它实际上会做什么 当我在“docker run…”中指定它(例如--expose=1234)时,端口将暴露在哪里?我不认为我可以访问主机中的端口,如果我想要,我认为我需要的是“-p”,那么“-expose”实际上可以做什么为什么我需要“我需要”--揭露;Docker中的选项?,docker,Docker,我对Docker中的“-expose”选项感到困惑,我不知道它实际上会做什么 当我在“docker run…”中指定它(例如--expose=1234)时,端口将暴露在哪里?我不认为我可以访问主机中的端口,如果我想要,我认为我需要的是“-p”,那么“-expose”实际上可以做什么 我想如果我想从主机访问容器端口,我需要的是,让容器中的服务监听端口,使用“docker run”中的“-p”选项在主机上发布端口。或者在这种情况下,我仍然必须使用“-expose”来公开端口?-p将允许您映射已公开的
我想如果我想从主机访问容器端口,我需要的是,让容器中的服务监听端口,使用“docker run”中的“-p”选项在主机上发布端口。或者在这种情况下,我仍然必须使用“-expose”来公开端口?
-p
将允许您映射已公开的端口(如Dockerfile中设置的)
但是,如果该端口未在Dockerfile及其生成的映像中公开,您仍然可以使用--EXPOSE
:
发件人:
EXPOSE
指令定义了提供服务的初始传入端口。这些端口可用于容器内的进程。操作员可以使用--expose
选项添加到公开的端口
这是一种通过在运行时公开端口来覆盖图像定义(未公开端口)的方法。实际上,“覆盖”是一个错误的术语,如和中所述: 除了
EXPOSE
指令外,图像开发人员没有
对网络有很大的控制权。EXPOSE
指令定义了
提供服务的初始传入端口。这些端口可用
容器内的进程。操作员可以使用的
--expose
选项添加到公开端口中
(“add”是这里的键:您可以在运行时声明其他端口)
正如我在评论中提到的,这与EXPOSE
端口上的活动无关(它不保证进程正在侦听容器中的端口)这只是一种声明端口的方法,该端口将接受数据包。您的测试显示了什么?
-p
做你想做的事吗?两个,入站和出站。@Eric是的,这就是想法。EXPOSE允许其他容器访问该端口(或用户将所述端口映射到主机端口)。不暴露表示端口在容器外部不可见。@不,两个问题(暴露和侦听)是完全独立的。EXPOSE意味着另一个容器(或主机,如果映射)可以查询端口。但是如果没有人听这个端口,你将得不到答案。EXPOSE并不能保证关于如何管理该端口的任何内容。它只是向外界开放。@Eric是的,这与倾听无关。这是一种声明开放端口()的正当方法:该端口现在将接受数据包。仅此而已。@Eric-p用于映射暴露的端口。如果该端口最初没有公开,则发布将失败。@SaadMalik否:公开而不发布是有意义的:它允许另一个容器访问您公开的端口,同时阻止任何用户访问同一端口(因为它没有发布)。因此需要--expose
。