Mon pare-feu bloque les connexions réseau du conteneur docker vers l'extérieur
pour moi c'est une configuration très standard, j'ai eu une machine ubuntu tournant docker et ufw comme mon pare-feu.
si mon pare-feu est activer les instances docker est incapable de se connecter à l'extérieur""
$ docker run -i -t ubuntu /bin/bash
WARNING: Docker detected local DNS server on resolv.conf. Using default external servers: [8.8.8.8 8.8.4.4]
root@d300c5f17207:/# apt-get update
Err http://archive.ubuntu.com precise InRelease
0% [Connecting to archive.ubuntu.com]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/precise/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/precise/Release.gpg Temporary failure resolving 'archive.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.
voici le journal d'ufw montrant les connexions bloquées depuis le conteneur docker.
$ sudo tail /var/log/ufw.log
Jun 30 15:41:56 localhost kernel: [61609.503199] [UFW BLOCK] IN=testbr0 OUT=eth0 PHYSIN=veth8Rj8Nh MAC=fe:ff:ed:42:b0:01:0a:7c:42:7c:a6:72:08:00 SRC=172.16.42.2 DST=8.8.8.8 LEN=64 TOS=0x00 PREC=0x00 TTL=63 ID=14886 DF PROTO=UDP SPT=60192 DPT=53 LEN=44
Jun 30 15:42:01 localhost kernel: [61614.500867] [UFW BLOCK] IN=testbr0 OUT=eth0 PHYSIN=veth8Rj8Nh MAC=fe:ff:ed:42:b0:01:0a:7c:42:7c:a6:72:08:00 SRC=172.16.42.2 DST=8.8.4.4 LEN=64 TOS=0x00 PREC=0x00 TTL=63 ID=16137 DF PROTO=UDP SPT=44812 DPT=53 LEN=44
Jun 30 15:42:06 localhost kernel: [61619.498516] [UFW BLOCK] IN=testbr0 OUT=eth0 PHYSIN=veth8Rj8Nh MAC=fe:ff:ed:42:b0:01:0a:7c:42:7c:a6:72:08:00 SRC=172.16.42.2 DST=8.8.8.8 LEN=64 TOS=0x00 PREC=0x00 TTL=63 ID=14887 DF PROTO=UDP SPT=60192 DPT=53 LEN=44
j'ai essayé d'ajouter une règle en utilisant l'ip.
$ sudo ufw allow in from 172.16.42.2
$ sudo ufw allow out from 172.16.42.2
Et n'ont pas de changement est encore bloquer.
Comment puis-je autoriser toutes les connexions du conteneur à l'extérieur avec une règle ufw?
4 réponses
peut-être est-ce dû à la version actuelle, mais la réponse actuelle ne fonctionne pas sur mon système (Docker 0.7.2 avec base Ubuntu image).
la solution est expliquée ici dans la documentation officielle Docker .
pour les paresseux:
- modifier
/etc/default/ufw
modifierDEFAULT_FORWARD_POLICY
valeur"ACCEPT"
, - recharger avec
[sudo] ufw reload
.
cela assure ufw transmettre votre trafic vers le réseau ponté du Docker (selon ma compréhension actuelle de ces choses...).
modifier /etc/ufw/before.rules
comme suit:
dans la section *filtre , après le premier bloc des lignes requises, ajouter:
# docker rules to enable external network access from the container
# forward traffic accross the bridge
-A ufw-before-forward -i docker0 -j ACCEPT
-A ufw-before-forward -i testbr0 -j ACCEPT
-A ufw-before-forward -m state --state RELATED,ESTABLISHED -j ACCEPT
à la fin du fichier, après la ligne qui dit COMMIT
, ajouter la section suivante:
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 172.16.42.0/8 -o eth0 -j MASQUERADE
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
après avoir sauvegardé le fichier, redémarrez ufw avec sudo ufw disable && sudo ufw enable
Êtes-vous sûr que l'ufw autorise la connexion sur le port concerné ?