2015-07-28 7 views
8

Ich versuche, einen Behälter zu laufen, aber ich erhalte die folgende Ausgabe:Lauf Docker Behälter: iptables: Keine Kette/target/Spiel mit diesem Namen

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 verwenden:

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 

Öffnet Port 80 auf meinem Server nicht genug? Gibt es etwas, das ich mit Docker-Schnittstelle verpasst habe? Ich benutze iptables mit einem Skript wie folgt aus:

#!/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 dieses Problem beheben?

Antwort

10

Ich glaube, das Problem innerhalb dieser Linien ist:

iptables -t Filter -F

iptables -t Filter -X

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

+5

Vielen Dank! Das war das Problem: Ich habe gerade den Docker-Daemon neu gestartet und jetzt läuft alles gut! – vmonteco

1

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, würde ich Ihnen dringend empfehlen, dorthin zu wechseln oder die vorhandenen iptables-Dienste zu nutzen und die Tabellen zu den entsprechenden Zeiten zu speichern/wiederherzustellen. Wenn Sie sich entscheiden, zu Ihren eigenen Diensten zu wechseln, vergewissern Sie sich, dass das Gerät angibt, dass es bestellt wurde Before=docker.service