在Ubuntu上部署服务的时候,使用ufw进行防火墙的配置时,遇到的相关问题,解决办法记录如下:
问题1:防火墙配置对Docker里面的容器端口不生效
# 修改docker配置
vi /etc/docker/daemon.json
# 在大括号内加入如下配置
,"iptables": false
# 示例:{ "registry-mirrors": ["https://ra9q5uam.mirror.aliyuncs.com"] ,"iptables": false}
问题2:docker内容器无法访问其他容器的端口
# 开放docker内容器的访问权限
ufw allow from 172.17.0.1/24
# 刷新防火墙配置
ufw reload
问题3:docker内容器无法访问外部网络
# 修改ufw规则
vim /etc/default/ufw
## 把DEFAULT_FORWARD_POLICY修改为下面
DEFAULT_FORWARD_POLICY="ACCEPT"
# 修改docker启动配置
vim /etc/default/docker
## 修改如下配置
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -iptables=false"
# 修改ufw配置
vim /etc/ufw/before.rules
## 在`*filter`前面添加下面内容
###########我是分割线############
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE
COMMIT
###########我是分割线############
# 重启服务器
reboot
问题4:使用ufw放开docker内的端口访问不生效
# 一般情况下docker外的端口想要开放端口访问直接执行以下指令即可
ufw allow 端口号
# 但是docker内的端口还需要先开放容器内的端口访问权限才行
ufw route allow 端口号
参考文章:
CSDN-让docker处于ufw防火墙的控制下
Moththe-修复 UFW 无法管理 Docker 端口