我试图添加一个端口转发到码头集装箱使用码头代理,但遇到以下错误,
下面是细节,
Docker版本: Docker版本17.03.0-ce,构建60ccb22
发布于 2019-02-01 05:10:03
我认为除了停止容器、移除它、然后从Dockerfile开始运行它,或者简单地通过添加-p 8000:8000来运行对接器之外,没有任何其他方法可以做到。Docker似乎不允许您直接修改坞代理,您必须使用标准命令。
您还可以通过直接更改iptables (即NAT表中的DOCKER链和filter中的DOCKER链)来手动将端口公开给外部访问。例如:
iptables -t nat -A DOCKER ! -i your_bridge0 -p tcp -m tcp --dport 8000 -j DNAT --to-destination 172.17.0.2:8000
和:
iptables -A DOCKER ! -i your_bridge0 -o your_bridge0 -d 172.17.0.2 -p tcp --m tcp --dport 80 -j ACCEPT
当然,这样你就必须确保规则得到遵守,这完全是一个完全不同的问题。Docker似乎不太关心谁管理iptable (ufw,firewalld等)。
这是可行的,即使码头代理根本没有运行。docker绑定到主机的端口,这意味着您控制过滤器表中输入链上的通信量(主机本身也是如此)。我仍然不知道为什么码头是这样构建的,但默认情况下,如果您公开一个容器(使用-p),然后删除DNAT规则,它仍将工作,因为请求将直接命中输入链。这是令人难以置信的,但没关系。
https://stackoverflow.com/questions/42826974
复制