在docker中,如何通过dockerfile关闭端口暴露?

时间:2015-01-08 05:29:44

标签: docker

我通过一个dockerfile创建一个图像,在这个文件中我用一行显示一个端口"暴露22"。

" sudo docker build -t mysql_server。 "

之后,我发现我不需要这个端口。

如何关闭22端口?

编辑: @Adrian Mouat @seanmcl

图像是一个mysql。所以数据库中的数据全部在我的容器中名为" cliff_mysql56"。如果我重建图像并运行它,我必须将我的所有数据从这个容器移动到新的亚军:(那就是我不想重建的原因。

4 个答案:

答案 0 :(得分:2)

在此之后的两年多时间内仍未得到答复,而且您可能会同时重建您的图像一千次。无论如何,我正在考虑这个问题,实际上你不能提交并运行新的图像,因为EXPOSE指令将在你再次运行时使用。但是,您可以避免从头开始重做提交并使用新映像作为新Dockerfile的基础。

我不认为这是一个很好的解决方案,但是,有时你只需要一个解决方案,即使远不是最先进的"最先进的" (另外,我自己也没试过,但我不明白为什么它不应该工作)。

基本上,首先将当前图像提交给新图像:

docker commit mysql_server new_mysql_server

然后使用之前的图像创建一个最小的新Dockerfile,如:

FROM new_mysql_server
EXPOSE 80 (or just remove EXPOSE)

ENTRYPOINT ["/what/ever"]

然后你建立它

docker build -t cmysql_server .

停止/清洁图像和以前的容器是可选的,最终你应该有一个没有附加端口的新图像。

即使你不再需要这个答案,我希望这对其他人来说可能是一个有用的建议。

干杯!

答案 1 :(得分:1)

Dockerfile中的EXPOSE行仅与使用--link链接容器非常相关。如果您在运行时未使用-p映射端口,则端口不会打开'。如果您真的依附于自己的形象,请将其留在原处,不要担心。 (虽然我同意apt image =牛比喻。)

答案 2 :(得分:0)

删除你的"暴露22"您的Dockerfile中的行,并重建您的图像

答案 3 :(得分:0)

删除“ EXPOSE”指令,然后重新构建。

我看到您提到过您不想重建,但是如果您不能在没有数据丢失的情况下快速安全地重建容器,则说明您没有正确使用docker。我将研究大量数据,以确保所需的数据能够持久存在。

相关问题