34 votes

pas d'internet à l'intérieur de docker-composition de service

Je ne peux pas atteindre réseau externe de docker-composer des conteneurs.

Considérez les points suivants docker-composition de fichier:

version: '2'
services:
    nginx:
      image: nginx

À l'aide de la simple docker run -it nginx bash j'arrive à atteindre les ip externes ou Internet IPs (ping www.google.com).

D'autre part, si j'utilise docker-les composer et de les attacher sur le contenant, je ne peux pas atteindre externe adresses IP / DNS.

le panneau info:

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 1
Server Version: 1.12.1
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 7
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge null host overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: apparmor seccomp
Kernel Version: 4.4.0-38-generic
Operating System: Ubuntu 16.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 3.859 GiB
Name: ***
ID: ****
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
WARNING: No swap limit support
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
Insecure Registries:
 127.0.0.0/8

docker-composer 1.8.1, construire 878cff1

le démon.fichier json:

{
  "iptables" : false,
  "dns" : ["8.8.8.8","8.8.4.4"]
}

7voto

peedee Points 1016

La dernière fois que j'ai eu un problème comme ça, je l'ai résolu comme ceci:

https://github.com/docker/docker/issues/866#issuecomment-19218300

pkill docker
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0
docker -d

Elle force le panneau de recréer le pont et reinit toutes les règles de réseau.

Pour des raisons pourquoi cela se produit, je n'ai pas de bonnes réponses. Mais je l'ai fait récemment trace le problème de retour à l' journald. Lorsque je redémarre journald (par exemple parce que j'ai changé sa config), la résolution DNS à l'intérieur de docker-composer des conteneurs de façon constante/reproductible des pauses. Je ne sais pas exactement pourquoi, je ne peux que dire que c'est un moyen fiable pour moi de le reproduire sur RHEL.

MODIFIER L' docker -d commande peut ne pas fonctionner pour vous en fonction de la version de support que vous utilisez, mais ne vous inquiétez pas à ce sujet, vous pouvez omettre la commande.

5voto

cornernote Points 515

Vérifiez /etc/default/docker afin de ne pas avoir la ligne suivante:

DOCKER_OPTS="--iptables=false"

Vérifiez également /etc/docker/daemon.json afin de ne pas avoir la clé suivante:

{
"iptables":false
}

Nous avons ajouté ce, sur un seul serveur pour obtenir UFW de travail avec docker. Nous avons alors changé pour un pare-feu externe. Passé les âges à la recherche pour la raison que le réseau externe n'étais pas de travail parce qu'il a été retiré de déployer notre guide. Espérons que cela aide quelqu'un d'autre.

0voto

Bruno Borges Points 420

L'image nginx vous êtes en tirant n'ont pas d' ping installé par défaut. Donc, si vous êtes vraiment à l'aide de la commande ping pour tester votre connexion, vous devez d'abord l'installer.

J'ai créé un custom Dockerfile de l'avoir installé:

FROM nginx:latest
RUN apt update && apt -y install iputils-ping

Ensuite, j'ai fabriqué localement et étiquetés comme mynginx.

Puis j'ai changé docker-compose.yml de l'utilisation de l'image personnalisée mynginx:

version: '2'
services:
  nginx:
    image: mynginx

Enfin, j'ai tiré docker-compose up, et a fait un docker exec, et testé le ping. Tout a très bien fonctionné. J'ai aussi fait docker run -ti ... et cela a fonctionné.

Ce qui me dérange sur votre question est combien de docker run peut vous donner un récipient avec des comportements différents que si elle est créée par docker-compose up.

Plus de clarté sur la façon dont vous vérifiez d'accès à internet serait utile cependant.

0voto

Gao Shenghan Points 119

Les conteneurs Docker a la possibilité d'accéder à internet par défaut. Voici comment j'ai résolu le problème la semaine dernière: docker conteneur ne peut accéder à internet avec un filet d'accueil

Ou vous laissez le récipient en mode hôte:

version: '2'
service:
  nginx:
    image: nginx
    network_mode: host

Mais comme @peedee a souligné le commentaire, cette solution sera perdu réseau de séparation entre l'hôte et les conteneurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X