从现有的 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
我想从图像中删除两个端口绑定 80
和 22
。是否可以?
注意:可以使容器脱机以删除绑定。
【问题讨论】:
【参考方案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 容器中删除端口绑定的主要内容,如果未能解决你的问题,请参考以下文章