我正在从具有已发布端口 (3000) 的映像创建容器。我想发布一个新端口 (3030),只有这个,如果我使用,--publish 3030:3030我最终会发布两个端口(3000 和 3030)。
是否可以以某种方式从正在运行的容器中取消发布端口,或者我是否必须从头开始我的映像?
deu*_*ion 10
干净的方法是创建一个新图像:通常,您总是希望您的 docker 容器和图像是可重现的。如果您手动更改与您的图像有偏差的某些内容,您就会剥夺自己的这种行为(管理您正在工作的基础设施的其他人会期望的)。
目前没有通过Docker API做到这一点的干净方法,但请务必检查他们的文档中是否有新的开发。
具体来说,有一个错误报告(github 上的可更改/可编辑卷/端口),如果您感兴趣,您可能想要评论/订阅。
现在,直接使用 iptables 管理 DNAT 是可行的方法。无论如何,docker 都是这样做的,但请注意,除了您想要的效果之外,我不确定它是否有任何副作用(例如 docker 试图重新添加这些规则等)
首先,您必须在以下列表中查找转发端口:
iptables -t nat --line-numbers --numeric --list
它产生这样的输出:
Chain PREROUTING(策略接受) num 目标 prot 选择源目标 1 DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE 匹配 dst-type LOCAL 链输入(政策接受) num 目标 prot 选择源目标 链输出(政策接受) num 目标 prot 选择源目标 1 DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE 匹配 dst-type LOCAL 链POSTROUTING(策略接受) num 目标 prot 选择源目标 1 全部伪装 -- 172.17.0.0/16 0.0.0.0/0 链式 DOCKER(2 个参考) num 目标 prot 选择源目标 1 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 到:172.17.1.1:80 2 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8081 到:172.17.1.2:80 3 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8082 到:172.17.1.3:80
然后,您可以使用删除匹配规则
iptables -t nat -D DOCKER $num,例如要替换匹配端口 8081 的规则,您必须使用
iptables -t nat -D DOCKER 2
享受!
| 归档时间: |
|
| 查看次数: |
19975 次 |
| 最近记录: |