最近pacman -Syu
在运行 Arch Linux 的计算机上运行,然后安装一些不相关的软件包后,使用公开新容器的端口--publish
会产生奇怪的错误。
以下是产生的错误的一个例子:
docker: Error response from daemon: driver failed programming external connectivity on endpoint bsp-devkit (7a47f30eaa0e104d6b9a7b75003a768e734182e20e057e51d33cca23da7dbf02): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 10809 -j DNAT --to-destination 172.17.0.2:10809 ! -i docker0: iptables v1.8.2 (legacy): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
(exit status 2)).
以下是一个失败的 Docker 运行命令:
docker run \
--publish=2223:22 \
--publish=8000:8000 \
--publish=69:69/udp --publish=10809:10809 \
--detach=true --privileged \
--hostname=bsp-devkit --name=bsp-devkit \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
-v $MIRRORDIR:/home/devel/mirror \
-it $IMAGE
我觉得这很奇怪,因为这看起来像是由较新版本的 iptables 引起的回归,但是 iptables 版本后面写了“legacy”(那么为什么该版本会进行重大更改更新?)并且我也没有在网上找到其他人询问这个特定的错误,所以我一定是把某些事情搞砸了。
我安装的软件包包括十六进制编辑器 Bless,但我不记得是否安装了其他东西。
附加说明 - 我从未在此系统上配置防火墙 - 此计算机已启用 VPN,但之前从未出现过此问题
更新:
- 更新 Docker 无法解决问题
- 将 iptables 包
v1.8.0
从 pacman 缓存降级并不能解决这个问题...... iptables 守护进程似乎没有运行;日志显示 /etc/iptables/iptables.rules 丢失- 创建 iptables.rules 并启动守护进程后,问题仍然存在
答案1
到目前为止,我已经设法通过降级 iptables 并重新启动系统来解决这个问题(重新启动 Docker 守护进程是不够的)
就我而言,旧版本的 iptables 在 pacman 缓存中,因此我可以使用以下命令降级:
pacman -U /var/cache/pacman/pkg/iptables-1:1.8.0-1-x86_64.pkg.tar.xz
我仍然想知道为什么会发生这种情况以及为什么我没有在其他地方看到这个错误,所以如果有人在这里评论一些信息我会更新我的答案。