从现有的 docker 容器中删除端口绑定

Posted

技术标签:

【中文标题】从现有的 docker 容器中删除端口绑定【英文标题】:Remove port binding from an existing docker container 【发布时间】:2014-12-18 15:02:07 【问题描述】:

目前我有一个用

创建的容器
docker run --detach --name gitlab_app --restart=always --publish 192.168.0.200:80:80 --publish 192.168.0.200:22:22 --volumes-from gitlab_data gitlab_image

我想从图像中删除两个端口绑定 8022。是否可以?

注意:可以使容器脱机以删除绑定。

【问题讨论】:

【参考方案1】:

如果容器可以离线,为什么不直接删除并在没有端口开关的情况下再次运行?

如果您确实需要在不删除容器的情况下执行此操作,您只需修改底层 iptables 更改即可。

# Will list the rules
iptables -L

# Will delete the rule you want to remove
iptables --delete [chain] <Rule definition>

一般而言,您的数据应始终位于 3 个位置之一

    可与重新启动的服务容器链接的纯数据容器。 在服务容器中定义的卷可以与新容器链接以进行备份。有关示例,请参阅 here。 在主机装载的卷中,以便您可以重新启动容器并将相同的位置装载到新容器中。

使用这三种方法中的一种,重新启动服务变得很容易,这应该是标准的,因为微服务应该被设计成可以经常停机和恢复。这些方法还将加速您的应用程序,因为默认联合文件系统比用于卷的普通文件系统慢。

如果您需要从未正确规划卷的容器中恢复数据,您可以使用 docker 导出功能来导出容器的状态。然后将其导入具有主机安装卷的新容器。将您的关键数据从容器内部复制到卷。

【讨论】:

在这种情况下,我删除了旧容器并创建了一个新容器,因为 gitlab 将数据存储在数据容器中。但是如果容器有改动,如何保证新容器有改动呢? 更新答案,因为这对评论来说太长了。 感谢您的详细解答。这真的很有帮助。

以上是关于从现有的 docker 容器中删除端口绑定的主要内容,如果未能解决你的问题,请参考以下文章

Docker:更改已创建容器上的端口绑定而不会丢失数据

docker 容器网络绑定端口部署

AWS EC2 容器服务/Elastic Beanstalk Docker 容器端口 udp 绑定

linux下docker启动nginx无法访问80端口

docker运行web容器及容器互连

为Docker创建自动化nginx反向代理