it-swarm.com.de

Docker-Container wird ausgeführt: iptables: Keine Kette / Ziel / Übereinstimmung mit diesem Namen

Ich versuche, einen Container auszuführen, erhalte jedoch das folgende Problem:

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)

Hier ist der Befehl, den ich benutze:

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

Ist das Öffnen von Port 80 auf meinem Server nicht ausreichend? Gibt es etwas, das ich bei der Docker-Oberfläche verpasst habe? Ich benutze Iptables mit einem Skript wie folgt:

#!/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

Wie könnte ich das beheben?

22
vmonteco

Ich glaube, das Problem liegt in folgenden Bereichen:

iptables -t Filter -F

iptables -t Filter -X

das macht alle Ketten frei. Eine mögliche Lösung besteht darin, den Docker-Daemon zu starten nach dem iptables-Setup-Skript. Andernfalls müssen Sie die Ketten, an denen Sie interessiert sind, explizit entfernen.

24
Yoanis Gil

Bei einem Docker-Compose-Setup trat das gleiche Problem auf.

1. Löschen Sie alle Ketten:

Sudo iptables -t filter -F
Sudo iptables -t filter -X

2. Starten Sie dann Docker Service neu:

systemctl restart docker
25

Das gleiche Problem trat bei RHEL 7 auf. Das Neustarten des Docker-Dienstes funktionierte bei mir, ohne dass irgendwelche iptable Regeln gelöscht werden mussten.

$ Sudo systemctl restart docker
2
Junaid

In irc.freenode.net # docker haben Sie angegeben, dass Sie Arch Linux ARM auf einem Raspberry Pi verwenden.

Wenn Sie dieses Skript nicht als Teil eines systemd-Dienstes ausführen, empfehle ich dringend, darauf zuzugreifen oder die vorhandenen iptables-Dienste zu nutzen und deren Fähigkeit zu nutzen, die Tabellen zu den entsprechenden Zeiten zu speichern/wiederherzustellen. Wenn Sie zu Ihren eigenen Diensten wechseln möchten, vergewissern Sie sich, dass das Gerät angibt, dass es bestellt wurde Before=docker.service

1
WarheadsSE