【发布时间】:2019-06-19 07:25:24
【问题描述】:
我的虚拟机上运行了几个 docker 容器。
其中一个使用 HTTP 服务器 (django/python) 公开 8000 端口。另一方面,安装了nginx,它监听80端口和代理传递到8000:
proxy_pass http://127.0.0.1:8000
完美运行。但是如果我直接从浏览器连接到 8000 端口,比如:
http://example.com:8000/
它返回来自内部 docker 处理程序的响应。
如何关闭那个 8000 端口而不伤害一切?
我尝试使用iptables 实用程序来执行此操作,但似乎 docker 创建了很多自己的规则,我不知道是否会在不破坏这些 docker 规则的情况下创建一个正常的规则:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (2 references)
target prot opt source destination
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target prot opt source destination
DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-ISOLATION-STAGE-2 (2 references)
target prot opt source destination
DROP all -- anywhere anywhere
DROP all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-USER (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
计划做:
iptables -A INPUT -p tcp --dport 8000 -j REJECT
可以吗?
【问题讨论】:
-
已知问题。 medium.com/@ebuschini/iptables-and-docker-95e2496f0b45。我没有写这个也没有使用它,但它可以让你很好地了解这个问题。
-
好的,知道了。谢谢
标签: linux docker nginx iptables