web-dev-qa-db-fra.com

Liens entre les conteneurs ne fonctionnant pas avec docker-compose version 2

La liaison entre les conteneurs dans un fichier docker-compose version 2 ne fonctionne pas.

Ce n'est qu'en utilisant le format 'ancien' version 1 que je vois le lien dans/etc/hosts du conteneur.

J'ai le fichier suivant docker-compose.yml de la version de base 2.

 version: '2' .________. services: 
 my-app: 
 image: Tomcat: 8.0 
 Nom du conteneur: my-app1 
 liens:
 - my-redis 
 my-redis: 
 image: redis 
 nom_cipient: my-redis1 

Quand j'exécute la commande suivante:

docker-compose up -d

Je vois que deux conteneurs sont démarrés, mais aucun lien n'est créé dans le fichier/etc/hosts:

docker exec -it mon-app1 cat/etc/hosts
 127.0.0.1 localhost 
 :: 1 localhost ip6-localhost ip6-loopback 
 fe00 :: 0 ip6-localnet 
 ff00 :: 0 ip6-mcastprefix 
 ff02 :: 1 ip6-allnodes 
 ff02 :: 2 ip6-allrouters 
 172.18.0.3 2abb84ccada9 

Depuis "my-app1", je peux envoyer une requête ping à l'autre conteneur en utilisant l'adresse IP de "my-redis1", mais je ne peux pas "cingler mon-redis1" (en fonction d'un nom).

Quel pourrait être le problème ici?

Information additionnelle:

  • Docker version 1.10.0, build 590d5108
  • docker-compose version 1.6.0, compilez d99cad6
  • Noyau Linux: 4.3.5-300.fc23.x86_64
13
user2030035

Le problème est le pare-feu de mon hôte Fedora. 

Avec le pare-feu temporairement désactivé ('systemctl stop firewalld', suivi de 'systemctl restart docker'), tout fonctionne conformément à la documentation de ce dernier.

Firewalld semble présenter un problème majeur lorsqu'il est utilisé avec docker, voir: https://github.com/docker/docker/issues/16137

Notez que RHEL/Centos 7 utilise également firewalld.

-Arjen

4
user2030035

Avec la version 2 de docker-compose, les «services» (conteneurs) du même réseau sont liés entre eux par défaut. 

Utilisation du fichier ci-dessous docker-compose.yml

version: '2'

services:
  my-app:
    image: Tomcat:8.0
    container_name: my-app1
    links:
      - my-redis
  my-redis:
    image: redis
    container_name: my-redis1

Vous pouvez simplement exécuter ping my-app à partir de votre conteneur my-redis et ping my-redis à partir de votre conteneur my-app pour vérifier qu'ils sont liés. 

Par exemple:

$ docker-compose up -d
$ docker exec -it my-app1 bash
# ping my-redis

Vous pouvez obtenir plus d'informations à ce sujet dans les liens ci-dessous: https://blog.docker.com/2016/02/compose-1-6/https: // github. com/docker/composer/blob/master/docs/networking.md

12
JesusTinoco

Dans mon cas, le problème était dans le nom du service.

version: "2"
services:
    my_auth_server:
       build: auth-server
       ports: 
           - "8082:8082"

    my_api:
       build: core-api
       ports: 
           - "8081:8081"   
       links:
           - my_auth_server:auth-server # <-- here changed from auth_server to auth-server
0
lukascode