2017-09-02 5 views
0

J'ai configuré des serveurs Web pour les exécuter à partir de conteneurs Docker dans le passé. Cette fois, on ne travaille pas. Mon hôte Docker exécute Ubuntu. Lorsque le conteneur Docker sur lequel une application de serveur Web est en cours d'exécution, les commandes nmap indiquent que l'adresse IP externe et le port sont "filtrés". Lorsque le conteneur Docker n'est pas en cours d'exécution, nmap affiche l'état "fermé". Ce n'est pas du tout ce à quoi je m'attendrais.Comment puis-je faire fonctionner un serveur Web à partir d'un conteneur Docker?

Le navigateur Web affiche «La connexion a été réinitialisée», que le conteneur Docker soit en cours d'exécution ou non. Ce n'est pas surprenant compte tenu des résultats de nmap que j'ai vu.

À l'intérieur d'un conteneur Docker prenant en charge un service Web, je peux normalement exécuter apt-get update et d'autres commandes apt-get install. Mais je ne peux pas avec ce problème conteneur. J'ai "l'échec de la résolution 'deb.debian.org'." Je ne suis pas sûr si cela est lié ou non. J'ai essayé de configurer un fichier /etc/docker/daemon.json avec 8.8.8.8 et 8.8.4.4. Ce fichier n'a pas l'air de faire quoi que ce soit. J'ai essayé de redémarrer le serveur Docker.

J'ai désactivé la version IP 6 sur le serveur Docker. Je peux désactiver le pare-feu. Pourquoi un conteneur Docker configuré pour utiliser un port provoque une commande nmap pour indiquer que le port est filtré lorsque le conteneur Docker est en cours d'exécution?

J'utilise un serveur AWS. Les contenus de resolv.conf qui ne sont pas mis en commentaire sont les suivants:

nameserver 172.31.0.2 
search us-east-2.compute.internal 

Mise à jour/modification. Pour répondre à un commentaire précédent, je veux poster l'info ici où le formatage est meilleur.

ipinfo.io boucle le montre (mais je remplace l'adresse IP avec xxxx)

{ 
    "ip": "x.x.x.x", 
    "hostname": "ec2-x-x-x-x.us-east-2.compute.amazonaws.com", 
    "city": "Columbus", 
    "region": "Ohio", 
    "country": "US", 
    "loc": "39.9653,-83.0235", 
    "org": "AS16509 Amazon.com, Inc.", 
    "postal": "43215" 
} 

iptables S montre sudo cela (mais je remplace les deux derniers octets de l'adresse IP avec xx)

-P INPUT ACCEPT 
-P FORWARD ACCEPT 
-P OUTPUT ACCEPT 
-N DOCKER 
-N DOCKER-ISOLATION 
-A FORWARD -j DOCKER-ISOLATION 
-A FORWARD -o br-5d57542faf97 -j DOCKER 
-A FORWARD -o br-5d57542faf97 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -i br-5d57542faf97 ! -o br-5d57542faf97 -j ACCEPT 
-A FORWARD -i br-5d57542faf97 -o br-5d57542faf97 -j ACCEPT 
-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 
-A DOCKER -d 172.31.x.x/32 ! -i br-5d57542faf97 -o br-5d57542faf97 -p tcp -m tcp --dport 80 -j ACCEPT 
-A DOCKER-ISOLATION -i docker0 -o br-5d57542faf97 -j DROP 
-A DOCKER-ISOLATION -i br-5d57542faf97 -o docker0 -j DROP 
-A DOCKER-ISOLATION -j RETURN 

Mise à jour/clarification: J'utilise une commande comme celui-ci pour créer le conteneur Docker:

sudo docker exécuter --name docker-nginx -p 7777: 80 - -network = isolated_nw --ip 172.31.x.x nginx

J'ai créé un réseau précédemment défini par l'utilisateur appelé isolated_nw. Je n'ai aucun problème quand je fais cela sur un serveur RedHat. Lorsque l'hôte Docker exécute Ubuntu, c'est quand j'ai le problème. Dois-je déplacer cette question sur un forum Ubuntu?

Autre mise à jour: Il s'agit principalement d'un problème de mise en réseau (car le service Web ne fonctionne pas). Les résultats d'une commande nmap montrent qu'un port semble être filtré lorsqu'un conteneur Docker est en cours d'exécution et qu'il est supposé écouter sur ce port. Les commandes apt-get ne peuvent pas être récupérées à partir de packages de référentiel public comme un conteneur Docker normal pourrait le faire sur un hôte RedHat Docker. Cette commande journalctl -u docker.service ne m'a pas montré quelque chose d'anormal avec les problèmes de réseau que j'ai.

Je suis allé à l'obtention d'un paquet .deb à copier dans un conteneur Docker pour installer netstat. J'ai alors couru cette commande:

netstat -plnat 

J'ai vu ceci:

Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address   Foreign Address   State  PID/Program name 

tcp  0  0 0.0.0.0:80    0.0.0.0:* LISTEN  1/nginx: master pro 
tcp  0  0 127.0.0.11:44720  0.0.0.0:* LISTEN  - 
+0

Avez-vous un DNS d'entreprise? 'cat/etc/resolv.conf' –

+0

Non, ce n'est pas un DNS d'entreprise. Mais c'est une instance AWS. J'ai répondu complètement à cette question en éditant le post principal. S'il vous plaît voir les deux dernières lignes du message principal pour la réponse. – Victor

+0

pouvez-vous vérifier ufw est activé? Si c'est le cas, essayez de le désactiver. Aussi pouvez-vous essayer d'exécuter le conteneur avec '--net = host' –

Répondre

0

Cela peut être un problème de réglage de DNS alors.

Créer un fichier /etc/docker/daemon.json avec le contenu ci-dessous

{ 
    "dns": ["172.31.0.2"], 
    "dns-search": ["us-east-2.compute.internal"] 
} 

Et puis redémarrez le service de docker. Cela définira le conteneur DNS pour chaque conteneur de votre lancement

+0

Malheureusement, cela n'a pas fonctionné; aucun problème n'a été résolu. Je ne peux toujours pas exécuter apt-get update dans un conteneur Docker. Chaque fois qu'un conteneur Docker a démarré, la commande nmap affiche la connectivité comme filtrée sur le port sur lequel le conteneur Docker est en écoute. – Victor

+0

Utilisez-vous VPC? Et est également une passerelle Internet ci-joint? êtes-vous capable d'utiliser 'curl ipinfo.io' de votre machine? pouvez-vous ajouter la sortie de 'iptables -S' à votre question –

+0

Non, je n'utilise pas de VPC. Je peux aller à internet. Mais quand j'utilise "ifconfig" ou "ip addr show", je ne vois pas de passerelle internet. Les deux autres questions seront visibles dans le message principal. Je vais l'éditer à cause du formatage dans cette boîte de commentaire. – Victor