2015-07-28 12 views
8

Sto cercando di eseguire un contenitore ma ottengo il seguente problema:Esecuzione contenitore finestra mobile: iptables: Nessuna catena/target/partita con quel nome

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) 

Ecco il comando che uso:

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 

Non sta aprendo la porta 80 sul mio server? C'è qualcosa che mi è mancato con l'interfaccia docker? Io uso iptables con uno script come questo:

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

Come potrei risolvere questo problema?

risposta

10

ritengo il problema è entro queste righe:

iptables -t filtro -F

iptables -t filtro -X

che indeeds chiare tutte le catene. Una possibile soluzione è avviare il daemon docker dopo lo script di installazione di iptables. Altrimenti dovrai rimuovere in modo esplicito le catene che ti interessano.

+5

Grazie! Questo era il problema: ho appena riavviato il demone docker e ora tutto funziona bene! – vmonteco

1

Nella finestra mobile irc.freenode.net # hai dichiarato che stai utilizzando Arch Linux ARM su un Raspberry Pi.

Se non si sta eseguendo questo script come parte di un servizio systemd, suggerirei di passare a questo, o fare uso dei servizi iptables esistenti e utilizzare la loro capacità di salvare/ripristinare le tabelle nei momenti appropriati. Se scegli di passare ai tuoi servizi, assicurati che l'unità dichiari che è stata ordinata Before=docker.service

Problemi correlati