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 被破坏了。请尝试以下步骤:
- 检查
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。
- 如果出现
DOCKER
链,则检查 if-pre-up
脚本中是否有 iptables-restore
命令(通常是 /etc/network/if-pre-up.d/iptables
)。如果是,则尝试重新创建 iptables-restore
的源文件,甚至临时禁用 iptables-restore
.
- 检查您的 Docker 配置(
/etc/docker/daemon.json
和 /etc/default/docker
)。也许某些应用程序在那里写了一些不需要的选项。
我在使用sudo docker-compose
时遇到同样的错误,我使用:
sudo iptables -t filter -F
sudo iptables -t filter -X
systemctl restart docker
完全奏效。
我开始学习如何使用 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 被破坏了。请尝试以下步骤:
- 检查
DOCKER
链是否出现在iptables
的规则中 (iptables --list-rules | grep '\-N\ DOCKER'
)。如果没有,则可以将命令iptables -N DOCKER
添加到if-pre-up
脚本 (/etc/network/if-pre-up.d/iptables
)。这只是解决方法,更好的解决方案是重新安装iptables
and/ordocker
后者取决于您如何安装它。也许更改方法是有意义的(apt-get install docker.io
而不是wget -qO- https://get.docker.com/ | sh
,反之亦然)。在那种情况下,不要忘记先卸载 Docker。 - 如果出现
DOCKER
链,则检查if-pre-up
脚本中是否有iptables-restore
命令(通常是/etc/network/if-pre-up.d/iptables
)。如果是,则尝试重新创建iptables-restore
的源文件,甚至临时禁用iptables-restore
. - 检查您的 Docker 配置(
/etc/docker/daemon.json
和/etc/default/docker
)。也许某些应用程序在那里写了一些不需要的选项。
我在使用sudo docker-compose
时遇到同样的错误,我使用
sudo iptables -t filter -F
sudo iptables -t filter -X
systemctl restart docker
完全奏效。