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

7

目前我有一个使用以下代码创建的容器

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,请问是否可以从现有的Docker容器中删除端口绑定?

NB:为了删除绑定,将容器下线是可行的。

1个回答

3
如果容器可以离线运行,为什么不直接删除并重新运行而不使用端口开关呢?
如果您需要在不删除容器的情况下执行此操作,您只需修改底层的iptables更改即可。
# Will list the rules
iptables -L

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

一般来说,您的数据应该始终位于以下三个位置之一:
  1. 一个仅用于数据的容器,可以与重新启动的服务容器链接。
  2. 定义在服务容器中的卷,可以与新容器链接以进行备份。有关示例,请参见此处
  3. 在主机挂载的卷中,以便您可以重新启动容器并将相同位置挂载到新容器中。
使用这三种方法之一重新启动服务变得更加容易,这应该成为标准做法,因为微服务应该设计为经常下线和恢复。这些方法还将加快应用程序的运行速度,因为默认联合文件系统比用于卷的普通文件系统要慢。
如果您需要从未正确规划卷的容器中恢复数据,则可以使用docker导出功能导出容器状态。然后将其导入具有主机挂载卷的新容器中,并将关键数据从容器内复制到卷中。

在这种情况下,我删除了旧容器并创建了一个新容器,因为GitLab将数据存储在数据容器中。但是,如果容器已经被修改,我该如何确保新容器也有这些更改? - Joyce Babu
由于此回答过长,无法在评论中显示,因此更新答案。 - Usman Ismail
谢谢您详细的回答,非常有帮助。 - Joyce Babu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接