运行 docker 容器:iptables:没有 chain/target/match 这个名字
Running docker container : iptables: No chain/target/match by that name
我正在尝试 运行 一个容器,但遇到以下问题:
Error response from daemon: Cannot start container b005715c40ea7d5821b15c44f5b7f902d4b39da7c83468f3e5d7c042e5fe3fbd: iptables failed: iptables --wait -t filter -A DOCKER ! -i docker0 -o docker0 -p tcp -d 172.17.0.43 --dport 80 -j ACCEPT: iptables: No chain/target/match by that name.
(exit status 1)
这是我使用的命令:
docker run -d -p 10080:80 -v /srv/http/website/data:/srv/http/www/data -v /srv/http/website/logs:/srv/http/www/logs myimage
我的服务器80端口打开还不够吗? docker 界面我错过了什么吗?
我将 iptables 与这样的脚本一起使用:
#!/bin/sh
# reset :
iptables -t filter -F
iptables -t filter -X
# Block all :
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
# Authorize already established connections :
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Authorize backloop :
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
# Authorize ssh :
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
# Authorize HTTP :
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
# Authorize HTTPS :
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
# Authorize DNS :
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
# Ping :
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
# Authorize FTP :
iptables -t filter -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 20 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT
# # Authorize NTP :
# iptables -t filter -A INPUT -p udp --dport 123 -j ACCEPT
# iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
# Authorize IRC :
iptables -t filter -A INPUT -p tcp --dport 6667 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 6667 -j ACCEPT
# Authorize port 10000 (for Node.JS server) :
iptables -t filter -A INPUT -p tcp --dport 10000 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 10000 -j ACCEPT
# Authorize port 631 (Cups server) :
iptables -t filter -A INPUT -p tcp --dport 631 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 631 -j ACCEPT
# Authorize port 9418 (git) :
iptables -t filter -A INPUT -p tcp --dport 9418 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 9418 -j ACCEPT
我该如何解决这个问题?
我认为问题出在这些行中:
iptables -t 过滤器 -F
iptables -t 过滤器 -X
这确实清除了所有链。一种可能的解决方案是在 iptables 安装脚本之后 启动 docker 守护进程。否则,您将需要明确删除您感兴趣的链。
在 irc.freenode.net#docker 中,您声明您在 Raspberry Pi.
上使用 Arch Linux ARM
如果您不运行将此脚本作为 systemd 服务的一部分,我强烈建议转向该脚本,或利用现有的 iptables 服务并利用它们的能力 save/restore在适当的时候上桌。如果您选择移动到您自己的服务,请确保该单元声明已订购 Before=docker.service
我在 docker-compose 设置中遇到了同样的问题。
1.清除所有链:
sudo iptables -t filter -F
sudo iptables -t filter -X
2。然后重启Docker服务:
systemctl restart docker
在 RHEL 7 上遇到同样的问题。重新启动 docker 服务对我有用,无需刷新任何 iptable
规则。
$ sudo systemctl restart docker
可能会发生错误,因为它试图影响 iptables "DOCKER" 过滤器链,但不存在。
选项--iptables=false 阻止docker 更改iptables 配置。
如果您选择修复 iptables docker 过滤器链,方法如下。
您实际上可以编辑 iptables 并添加它,使其看起来像这里的示例 Docker: How to re-create dockers additional iptables rules?
像这样
sudo vi /etc/sysconfig/iptables
添加“:DOCKER”行
*nat
:PREROUTING ACCEPT [144:8072]
:INPUT ACCEPT [87:5208]
:OUTPUT ACCEPT [118:8055]
:POSTROUTING ACCEPT [118:8055]
:DOCKER - [0:0]
... your previous rules here ...
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5781:5099614]
:DOCKER - [0:0]
... your previous rules here ...
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
COMMIT
重新启动...例如
service iptables restart
很好"further read"link哪里解释的很好
https://medium.com/@ebuschini/iptables-and-docker-95e2496f0b45
我在安装 firewalld 后遇到同样的问题。
我通过以下方式修复它:
service firewalld stop
service docker restart
是的,我遇到了同样的问题,如上所述,下面的命令对我有用
sudo iptables -t filter -F
sudo iptables -t filter -X
systemctl restart docker
我可以确认这个问题是由 iptables 或 firewalld 引起的,因为在我的容器停止之前我编辑了我的防火墙规则。
iptables -t filter -X
iptables -t filter -F
我也遇到了同样的问题。在 运行 docker 启动 mongodb 之前,我正在测试 ssh 服务。
下面的命令可以为我解决这个问题。
iptables -t filter -F
iptables -t filter -X
systemctl restart docker
我正在尝试 运行 一个容器,但遇到以下问题:
Error response from daemon: Cannot start container b005715c40ea7d5821b15c44f5b7f902d4b39da7c83468f3e5d7c042e5fe3fbd: iptables failed: iptables --wait -t filter -A DOCKER ! -i docker0 -o docker0 -p tcp -d 172.17.0.43 --dport 80 -j ACCEPT: iptables: No chain/target/match by that name.
(exit status 1)
这是我使用的命令:
docker run -d -p 10080:80 -v /srv/http/website/data:/srv/http/www/data -v /srv/http/website/logs:/srv/http/www/logs myimage
我的服务器80端口打开还不够吗? docker 界面我错过了什么吗? 我将 iptables 与这样的脚本一起使用:
#!/bin/sh
# reset :
iptables -t filter -F
iptables -t filter -X
# Block all :
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
# Authorize already established connections :
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Authorize backloop :
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
# Authorize ssh :
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
# Authorize HTTP :
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
# Authorize HTTPS :
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
# Authorize DNS :
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
# Ping :
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
# Authorize FTP :
iptables -t filter -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 20 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT
# # Authorize NTP :
# iptables -t filter -A INPUT -p udp --dport 123 -j ACCEPT
# iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
# Authorize IRC :
iptables -t filter -A INPUT -p tcp --dport 6667 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 6667 -j ACCEPT
# Authorize port 10000 (for Node.JS server) :
iptables -t filter -A INPUT -p tcp --dport 10000 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 10000 -j ACCEPT
# Authorize port 631 (Cups server) :
iptables -t filter -A INPUT -p tcp --dport 631 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 631 -j ACCEPT
# Authorize port 9418 (git) :
iptables -t filter -A INPUT -p tcp --dport 9418 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 9418 -j ACCEPT
我该如何解决这个问题?
我认为问题出在这些行中:
iptables -t 过滤器 -F
iptables -t 过滤器 -X
这确实清除了所有链。一种可能的解决方案是在 iptables 安装脚本之后 启动 docker 守护进程。否则,您将需要明确删除您感兴趣的链。
在 irc.freenode.net#docker 中,您声明您在 Raspberry Pi.
上使用 Arch Linux ARM如果您不运行将此脚本作为 systemd 服务的一部分,我强烈建议转向该脚本,或利用现有的 iptables 服务并利用它们的能力 save/restore在适当的时候上桌。如果您选择移动到您自己的服务,请确保该单元声明已订购 Before=docker.service
我在 docker-compose 设置中遇到了同样的问题。
1.清除所有链:
sudo iptables -t filter -F
sudo iptables -t filter -X
2。然后重启Docker服务:
systemctl restart docker
在 RHEL 7 上遇到同样的问题。重新启动 docker 服务对我有用,无需刷新任何 iptable
规则。
$ sudo systemctl restart docker
可能会发生错误,因为它试图影响 iptables "DOCKER" 过滤器链,但不存在。
选项--iptables=false 阻止docker 更改iptables 配置。
如果您选择修复 iptables docker 过滤器链,方法如下。
您实际上可以编辑 iptables 并添加它,使其看起来像这里的示例 Docker: How to re-create dockers additional iptables rules?
像这样
sudo vi /etc/sysconfig/iptables
添加“:DOCKER”行
*nat
:PREROUTING ACCEPT [144:8072]
:INPUT ACCEPT [87:5208]
:OUTPUT ACCEPT [118:8055]
:POSTROUTING ACCEPT [118:8055]
:DOCKER - [0:0]
... your previous rules here ...
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5781:5099614]
:DOCKER - [0:0]
... your previous rules here ...
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
COMMIT
重新启动...例如
service iptables restart
很好"further read"link哪里解释的很好
https://medium.com/@ebuschini/iptables-and-docker-95e2496f0b45
我在安装 firewalld 后遇到同样的问题。
我通过以下方式修复它:
service firewalld stop
service docker restart
是的,我遇到了同样的问题,如上所述,下面的命令对我有用
sudo iptables -t filter -F
sudo iptables -t filter -X
systemctl restart docker
我可以确认这个问题是由 iptables 或 firewalld 引起的,因为在我的容器停止之前我编辑了我的防火墙规则。
iptables -t filter -X
iptables -t filter -F
我也遇到了同样的问题。在 运行 docker 启动 mongodb 之前,我正在测试 ssh 服务。
下面的命令可以为我解决这个问题。
iptables -t filter -F
iptables -t filter -X
systemctl restart docker