In docker,how to close the port expose by dockerfile?
我用一个dockerfile制作了一个图像,在其中我通过"expose 22"一行暴露端口。
"sudo docker build-t mysql_服务器。"
在那之后,我发现我不需要港口。
如何关闭22端口?
编辑:@Adrian Mouat@Seanmcl公司
图像是一个mysql,所以数据库中的数据都在我的容器"cliff_mysql56"中,如果我重新构建图像并运行它,我必须将所有数据从这个容器移动到新的运行者:(。这就是我不想重建的原因。
在这之后的两年多时间里,它仍然没有被发送,你可能已经重建了你的形象一千次。无论如何,我在考虑这个问题,实际上您不能提交和运行新的映像,因为当您再次运行它时,expose指令将被使用。但是,您可以避免从头开始重新构建进行提交,并使用新映像作为新dockerfile的基础。
我不认为这是一个很好的解决方案,但是的,有时你只是需要一个解决方案,即使远不是"最先进的"(而且,我自己也没有尝试过,但我不明白为什么它不起作用)。
基本上,首先将当前图像提交到新图像中:
1 | docker commit mysql_server new_mysql_server |
然后,使用以前的图像创建一个最小的新dockerfile,如下所示:
1 2 3 4 | FROM new_mysql_server EXPOSE 80 (or just remove EXPOSE) ENTRYPOINT ["/what/ever"] |
然后你建造它
1 | docker build -t cmysql_server . |
停止/清理图像和以前的容器是可选的,最终您应该有一个没有附加端口的新图像。
尽管你不再需要这个答案,但我希望它对其他人来说是一个有用的建议。
干杯!
dockerfile中的expose行只与链接容器--link相关。如果在运行时不使用-p映射端口,则该端口不会"打开"。如果你真的很喜欢你的照片,就把它放进去,不要担心。(尽管我同意APT图像=牛的类比。)
删除"expose"指令,然后重新生成。
我看到你提到过你不想重建,但是如果你不能在没有数据丢失的情况下快速安全地重建容器,你就没有正确地使用Docker。我会对卷进行研究,以确保所需的数据能够持久保存。
删除Dockerfile中的"expose 22"行,并重建图像