Docker:暴露容器IP上的端口
我试图公开Docker容器上的端口,而不必将其映射到主机上的端口;这对于sql数据库或web系统(如redmine)非常适用,我可以从主机系统访问容器IP地址的端口3000上的redmine,而无需映射端口 我的Dockerfile看起来像这样(为了“清晰”而删除了卷、环境等) 这应该告诉gunicorn将(-b)绑定到端口8000或所有地址;因此,当我使用say运行它时,我希望容器上的端口8000是打开的Docker:暴露容器IP上的端口,docker,dockerfile,Docker,Dockerfile,我试图公开Docker容器上的端口,而不必将其映射到主机上的端口;这对于sql数据库或web系统(如redmine)非常适用,我可以从主机系统访问容器IP地址的端口3000上的redmine,而无需映射端口 我的Dockerfile看起来像这样(为了“清晰”而删除了卷、环境等) 这应该告诉gunicorn将(-b)绑定到端口8000或所有地址;因此,当我使用say运行它时,我希望容器上的端口8000是打开的 docker run myappthing 但是没有,即使是古尼康也在快乐地奔跑。但如
docker run myappthing
但是没有,即使是古尼康也在快乐地奔跑。但如果我这样做了
docker run -p 127.0.0.1:8028:8000 myappthing
然后,不仅主机上的端口8028打开,容器上的端口8000也打开
这里发生了什么事;我错过了什么
谢谢
docker ps
以不同方式报告端口,如下所示:redmine和mysql显示它们未映射到主机上映射我的尝试的端口
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b68765d57f0b 52adec2834c2 "gunicorn -b 172.18.…" 45 minutes ago Up 45 minutes 127.0.0.1:8028->8000/tcp afc-timerec-manual
aaecd3cd319d 9671544d5284 "/docker-entrypoint.…" 7 months ago Up 7 weeks 3000/tcp afc-redmine
fb4e55d352b2 1571059e8458 "docker-entrypoint.s…" 13 months ago Up 4 days 3306/tcp afc-glpi-data
更多插图:如果我打开容器上的外壳,我可以执行以下操作:
lynx http://127.0.0.1:8000
lynx http://172.18.0.28:8000
(其中172.18.0.28是容器IP地址),这两个命令都允许我访问webapp
同时,回到主机上—容器上的8000端口未打开,因此
lynxhttp://172.18.0.28:8000
失败端口未使用EXPOSE
指令发布,您需要使用-p
看
EXPOSE指令实际上并不发布端口。信息技术
作为构建文档的人员之间的文档类型
图像和运行容器的人员,关于哪些端口
打算出版的。在运行时实际发布端口
在容器中,使用docker run上的-p标志来发布和映射一个或多个
更多端口,或使用-P标志发布所有公开的端口并映射它们
到高阶端口
端口未使用
EXPOSE
指令发布,您需要使用-p
看
EXPOSE指令实际上并不发布端口。信息技术
作为构建文档的人员之间的文档类型
图像和运行容器的人员,关于哪些端口
打算出版的。在运行时实际发布端口
在容器中,使用docker run上的-p标志来发布和映射一个或多个
更多端口,或使用-P标志发布所有公开的端口并映射它们
到高阶端口
谢谢,我明白了-但是其他容器在运行期间如何在没有-p的情况下暴露它们的端口:例如,redmine打开了端口3000,但我在启动容器时没有指定-p。在
docker ps
(我将在上面添加一个示例…@Mack端口通过EXPOSE image指令公开。-p
参数不是用于公开,而是用于发布。主要区别是:-公开表示端口可以由同一网络中的其他容器连接,-发布表示已公开的端口映射到主机。正如您在docker ps
,这不应该发生。也许可以检查docker信息?谢谢,我明白了-但是其他容器在运行期间如何在没有-p的情况下暴露其端口:例如,redmine打开了端口3000,但我在启动容器时没有指定-p。并且在docker ps
中报告的情况有所不同(我将在上面添加一个示例…@Mack端口通过EXPOSE image指令公开。-p
参数不是用于公开,而是用于发布。主要区别是:-公开表示端口可以由同一网络中的其他容器连接,-发布表示已公开的端口映射到主机。正如您在docker ps
,这不应该发生。也许可以检查docker信息?
lynx http://127.0.0.1:8000
lynx http://172.18.0.28:8000