当前位置: 首页 > 知识库问答 >
问题:

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

江宏放
2023-03-14

我已经通过dockerfile制作了一个图像,其中我通过“暴露22”行暴露了一个端口。

“sudo docker build-t mysql_服务器。”

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

如何关闭22端口?

编辑:@Adrian Mouat@seanmcl

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

共有3个答案

姚和顺
2023-03-14

删除Dockerfile中的“expose 22”行,重建图像

翟鹏
2023-03-14

Dockerfile中的EXPOSE行只与链接带有--link的容器相关。如果在运行时没有使用-p映射端口,则该端口不是“打开的”。如果你真的很喜欢你的照片,就把它留在里面,别担心。(尽管我同意apt图像=牛的类比。)

关志
2023-03-14

两年多之后,这个问题仍然没有得到解答,而你可能已经重建了一千次自己的形象。总之,我在想这个问题,实际上你不能提交并运行一个新的映像,因为当你再次运行它时,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 .

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

即使你不再需要这个答案,我希望它能对其他人有用。

干杯!

 类似资料:
  • 我正在尝试用Docker和Selenium Grid建立一个自动化测试平台。在下图中,你可以看到我使用的结构。最上面是运行在计算引擎上的ubuntu服务器。左边是一个运行ubuntu 14.04的docker容器。该容器使用Google App Engine在localhost:8080上运行我们的项目。右边是Selenium集线器,有两个节点在端口4444上运行。 Docker和Selenium

  • EXPOSE 声明端口 格式为 EXPOSE <端口1> [<端口2>...]。 EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,

  • 我知道在linux主机系统上使用pulse audio是可能的,但是< code>paprefs是为Linux而不是mac构建的。

  • 问题内容: 我知道关于在Windows上运行Docker有很多问题,但是这个问题是关于在Windows上运行全新的Windows Docker。 就我而言,我使用的是Windows 10 Pro 64位。根据站点,此版本应受支持。 我一直在遵循在这里找到的教程:https : //prakhar.me/docker-curriculum/ 我也尝试按照官方指南进行操作:https : //docs

  • 本文向大家介绍Docker动态给容器Container暴露端口操作,包括了Docker动态给容器Container暴露端口操作的使用技巧和注意事项,需要的朋友参考一下 查看Container的IP地址 docker inspect <container name or id>| grep IPAddress 查看Container的映射的端口 用iptables查看容器映射情况 iptables

  • 此外,我还使用Hystrix进行断路。 我的问题是如何使Hystrix流暴露在执行器端口上? 目前,我仅通过以下代码在标准端口上公开它: 这些是我的一些依靠: 我不想使用Spring Cloud,因为这里有@EnableHystrix,它在执行器端口上提供流。