解决 ufw 无法管理 docker 容器端口的问题

87

问题

  在 Linux 上,我们通常用 firewalld 或 ufw 管理防火墙,它们事实上是 iptables 的壳,所以能用更简易的脚本管理 iptables。Docker 会自动添加删除 iptables 路由规则,使得本来只是为了在内部提供服务的一个端口被暴露在公共网络上,并且无法使用 ufw 管理。最直接做法是使用 --iptables=false 配置项禁止 Docker 操作 iptables ,但本机 Docker 的网络也难以操控。

解决

使用开源工具 ufw-docker :https://github.com/chaifeng/ufw-docker

  1. 安装
sudo wget -O /usr/local/bin/ufw-docker \
  https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker
chmod +x /usr/local/bin/ufw-docker
  1. 初始化规则
ufw-docker install
  1. 启用某个容器的外网访问
# 允许nginx这个docker的80的tcp端口暴露给外网。
ufw-docker allow nginx 80/tcp
# 允许xx容器得所有端口
ufw-docker allow xx