按照/sf/answers/3238673021/(@mkubaczyk回答“Ubuntu 下 docker + ufw 的最佳实践是什么”)指南正确配置 Docker 和 UFW,但仍然无法在容器中访问 Internet。
可能是什么问题?
问题可能出在您使用docker-compose. 默认情况下,为docker-compose.yml文件中的服务创建新网络。这导致您不仅拥有docker0与172.17.0.0/16子网设置的接口,而且通常还有其他接口 172.x.0.0/16。
为了克服这个问题,您应该为您的网络添加更多规则:
$ iptables -t nat -A POSTROUTING ! -o br-XXX -s 172.YYY.0.0/16 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)
其中 br-XXX 是接口名称,172.YYY.0.0/16 - 子网。
或者,docker0通过在您docker-compose.yml描述的每个服务中使用单个网络:
network_mode: bridge
Run Code Online (Sandbox Code Playgroud)