Docker:123-125/tcp和0.0.0.0:123-125->;之间Docker ps输出的区别是什么;123-125/tcp符号?
使用standart命令启动docker容器后Docker:123-125/tcp和0.0.0.0:123-125->;之间Docker ps输出的区别是什么;123-125/tcp符号?,docker,containers,port,Docker,Containers,Port,使用standart命令启动docker容器后 docker run -p 123-125:123-125 -it <container_name> "bin/bash" docker run-p 123-125:123-125-it“bin/bash” 。。。用CTRL-P+CTRL-Q退出时,我注意到我突然在docker ps的端口列中看到两个块: 100-102/tcp,0.0.0.0:123-125:123-125/tcp 我从来没有为我的容器设置1
docker run -p 123-125:123-125 -it <container_name> "bin/bash"
docker run-p 123-125:123-125-it“bin/bash”
。。。用CTRL-P+CTRL-Q退出时,我注意到我突然在docker ps的端口列中看到两个块:
100-102/tcp,0.0.0.0:123-125:123-125/tcp
我从来没有为我的容器设置100-102个端口
我不能得到两样东西:
第一个参数是容器公开的端口。它们可能暴露在用于创建图像的Dockerfile中。它们只是一种规范/文档,告诉您应该发布这些端口 第二个参数是绑定到主机系统的公开端口:这些端口链接到来自主机的端口,并且它们对来自任何IP地址(0.0.0.0)的外部连接开放。这些端口是发布的(因此
-p
)
如果您使用-p
选项运行容器,它将发布/绑定所有公开的端口(或端口范围,在您的情况下)。使用-p
发布端口仅公开和绑定使用该选项指定的端口。这就是你想要的
下面是一个更清楚的例子:
Dockerfile
。在其中,我公开了端口范围3000-3002docker build-t测试。
docker运行测试
CONTAINER ID IMAGE COMMAND [...] PORTS NAMES
59b8a12a8d70 testing "docker-entrypoint.s…" [...] 3000-3002/tcp amazing_gagarin
CONTAINER ID IMAGE COMMAND [...] PORTS NAMES
d55dd52d94a3 testing "docker-entrypoint.s…" [...] 3000-3002/tcp, 0.0.0.0:3005-3007->3005-3007/tcp agitated_boyd
如您所见,我没有发布任何端口,但我可以在docker ps
localhost:3000
:没有任何功能->端口未发布
docker run-p 3005-3007:3005-3007测试的容器
CONTAINER ID IMAGE COMMAND [...] PORTS NAMES
59b8a12a8d70 testing "docker-entrypoint.s…" [...] 3000-3002/tcp amazing_gagarin
CONTAINER ID IMAGE COMMAND [...] PORTS NAMES
d55dd52d94a3 testing "docker-entrypoint.s…" [...] 3000-3002/tcp, 0.0.0.0:3005-3007->3005-3007/tcp agitated_boyd
localhost:3005
:它可以工作!->我发布了我的端口,将它们绑定到我的主机端口,这样我就可以连接到它们(还因为我的应用程序确实侦听3000-3007之间的端口)
localhost:3000
:它仍然不工作->端口范围3000-3002仍然未发布,但仍然标记为已公开,告诉我可能要使用此范围
-p
选项的格式,请参见:格式:ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort
0.0.0.0
指定可在主机上访问容器的IP0.0.0.0
是默认值,表示所有IP地址(即,连接到主机的每个人都可以通过公开的端口123-125访问您的容器)。另一方面,127.0.0.1
意味着您只能从localhost访问容器
中定义)公开
0.0.0.0:123-125:123:125
是否正确。发布选项(-p)没有遵循任何允许的格式:
ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort
|集装箱港口
给定的run命令有3个冒号,但第一部分不是IP。所以,我相信Docker没有很好地接受你的指挥
如果要将容器端口123..125匹配到相应的主机端口SM,正确的run命令是:
docker run -p 123-125:123-125 -it <container_name> "bin/bash"
docker run-p 123-125:123-125-it“bin/bash”
我不确定为什么100:102/tcp
映射会产生。尽管图像的基本图像可能在EXPOSE
中建议使用102
端口,但除非您使用docker run-p 100:102
明确指定,否则不应将其公开。我假设此映射可能是由-p
选项中不正确的三个冒号语法意外导致的。为了清楚起见,在docker运行示例中,它应该是
,而不是
。当您在docker文件中公开时,即使未发布/绑定,也会显示公开的端口。查看我的答案@user14967413我非常确定,他的docker ps
的实际结果是100-102/tcp
,并且他也使用-p 123-125:123-125
运行他的容器,这是由于他问题中的错误键入。如果不是,他将有一个完全不同的错误,他会询问这个错误,并且无法连接到他的容器。我在回答他的问题:公开和出版有什么区别?那么你知道公开和出版有什么区别吗@Miamibeacht其语法正确:请参见问题标题。这只是问题正文中的一个输入错误。费里亚是对的。但是-接得好,查理!它们的语法是正确的:参见问题标题。这只是问题正文中的一个错误输入。很好的解释!谢谢你,费里亚!