Docker-compose: 当 docker-compuse up 时必须禁用防火墙并重启 docker 服务

Docker-compose: must disable firewall and restart docker service when docker-compuse up

我开始学习如何使用 Docker 和 docker-compose,每次我重新启动计算机时,我都会在执行 docker-compose up 时收到此消息:

Creating network "dockerlemp_default" with the default driver

ERROR: Failed to program FILTER chain: iptables failed: iptables --wait -I FORWARD -o br-74bd0d3628e8 -j DOCKER: iptables v1.6.1: Couldn't load target `DOCKER':No such file or directory

Try `iptables -h' or 'iptables --help' for more information.

通过执行命令 sudo ufw disable 禁用防火墙并通过命令 systemctl restart docker 重新启动 docker 服务后,我可以正常启动 docker-compose。 但是我每次重启都必须这样做。

有人可以向我解释 iptables 的问题是什么以及如何解决这个问题吗? 非常感谢。

仅供参考,这是我的设置:

Lenovo Ideapad 510S-08ISH - Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz

Ubuntu 18.04.3 LTS Bionic (window manager i3wm)

Docker 18.09.7

docker-compose 1.17.1

最新的 Docker 版本确实以足够正确的方式使用 iptables 的规则进行操作,即使在 Debian/Ubuntu 上也是如此(您不使用 selinux,是吗? ?)。所以这个错误意味着一些 libs/configs 被破坏了。请尝试以下步骤:

  1. 检查 DOCKER 链是否出现在 iptables 的规则中 (iptables --list-rules | grep '\-N\ DOCKER')。如果没有,则可以将命令 iptables -N DOCKER 添加到 if-pre-up 脚本 (/etc/network/if-pre-up.d/iptables)。这只是解决方法,更好的解决方案是重新安装 iptables and/or docker 后者取决于您如何安装它。也许更改方法是有意义的(apt-get install docker.io 而不是 wget -qO- https://get.docker.com/ | sh,反之亦然)。在那种情况下,不要忘记先卸载 Docker。
  2. 如果出现 DOCKER 链,则检查 if-pre-up 脚本中是否有 iptables-restore 命令(通常是 /etc/network/if-pre-up.d/iptables)。如果是,则尝试重新创建 iptables-restore 的源文件,甚至临时禁用 iptables-restore.
  3. 检查您的 Docker 配置(/etc/docker/daemon.json/etc/default/docker)。也许某些应用程序在那里写了一些不需要的选项。

我在使用sudo docker-compose时遇到同样的错误,我使用:

sudo iptables -t filter -F

sudo iptables -t filter -X

systemctl restart docker

完全奏效。