我有一个与这个非常相似的问题:Iptables 规则集,以便 docker 容器可以访问主机 IP 上的服务我的容器不被允许访问主机。链接的 stackoverflow 接受答案的问题是,当我运行时,iptables -I INPUT -i docker0 -j Accept
我的容器仍然没有被授予对主机的访问权限。
运行dc up
docker compose 时会创建一个桥接适配器,如下所示:
br-ddc5c71a14aa: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:5e:11:84:5b brd ff:ff:ff:ff:ff:ff
inet 172.20.0.1/16 brd 172.20.255.255 scope global br-ddc5c71a14aa
valid_lft forever preferred_lft forever
inet6 fe80::42:5eff:fe11:845b/64 scope link
valid_lft forever preferred_lft forever
并且 iptables 调整如下:
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
11722 1171K DOCKER-USER all -- * * 0.0.0.0/0 0.0.0.0/0
11722 1171K DOCKER-ISOLATION-STAGE-1 all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- * docker0 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 DOCKER all -- * docker0 0.0.0.0/0 0.0.0.0/0
Chain DOCKER (2 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- !br-ddc5c71a14aa br-ddc5c71a14aa 0.0.0.0/0 172.20.0.2 tcp dpt:5432
0 0 ACCEPT tcp -- !br-ddc5c71a14aa br-ddc5c71a14aa 0.0.0.0/0 172.20.0.3 tcp dpt:443
0 0 ACCEPT tcp -- !br-ddc5c71a14aa br-ddc5c71a14aa 0.0.0.0/0 172.20.0.3 tcp dpt:80
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
pkts bytes target prot opt in out source destination
0 0 DOCKER-ISOLATION-STAGE-2 all -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0
5006 280K DOCKER-ISOLATION-STAGE-2 all -- br-ddc5c71a14aa !br-ddc5c71a14aa 0.0.0.0/0 0.0.0.0/0
要让容器访问主机,我似乎能做的唯一一件事就是接受来自桥接适配器的数据包iptables -I INPUT -i br-ddc5c71a14aa -j ACCEPT
。
我正在运行 fedora 28、Docker 版本 18.06.1-ce、内部版本 e68fc7a 和 docker-compose 版本 1.22.0、内部版本 f46880fe。我需要做什么才能让 docker/docker compose 可以自动调整 iptables 让主机接受来自容器的数据包?