web-dev-qa-db-fra.com

image de composition de docker nommée: "prefix_% s_1" au lieu de "% s"

Lorsque j'ai configuré quelques conteneurs Docker dans docker-compose.yaml fichier avec liens, le nom des conteneurs finit par être au format prefix_%s_1 au lieu de %s, et l'alias dans /etc/hosts sur le conteneur de liaison est le même.

Pourquoi l'alias du conteneur redistest_redis_1 au lieu de redis?

Voici les fichiers et sorties pertinents:

# docker-compose.yaml
monkey:
    build: ../../monkey
    dockerfile: test.Dockerfile
    links:
      - redis:redis
    ports:
      - "9006:9006"

redis:
    build: ../storage/redis
    ports:
      - "6379:6379"

Après avoir exécuté docker-compose build && docker-compose up:

$ docker-compose ps
Name           Command                        State  Ports
---------------------------------------------------------------------------
test_redis_1   redis-server /usr/local/et ...   Up   0.0.0.0:6379->6379/tcp
test_monkey_1  python -m SimpleHTTPServer ...   Up   0.0.0.0:9006->9006/tcp

Sortie du test_monkey_1 récipient:

Step 14 : RUN cat /etc/hosts
 ---> Running in 1c104e3d9bf5
172.17.1.26     75a485df1325
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.17.1.26     thirsty_lumiere.bridge
172.17.0.220    test_redis_1
172.17.0.220    test_redis_1.bridge
172.17.1.26     thirsty_lumiere
 ---> 3a06bac9b3ca
Removing intermediate container 1c104e3d9bf5
Step 15 : RUN echo
 ---> Running in a1c5b5f8ae0f

 ---> 385c9ee44332
Removing intermediate container a1c5b5f8ae0f
Step 16 : RUN ifconfig eth0 | grep inet addr
 ---> Running in 17cd638c6473
          inet addr:172.17.1.28  Bcast:0.0.0.0  Mask:255.255.0.0
 ---> 21235e29abc1
Removing intermediate container 17cd638c6473
Step 17 : RUN echo
 ---> Running in 8c0b1db2a69b

 ---> e2dd190eb4d1
Removing intermediate container 8c0b1db2a69b
Step 18 : RUN env
 ---> Running in 50cd1b6bf9da
HOSTNAME=75a485df1325
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/data/web/tunnelbear.com/play/tPWD=/data/web/tunnelbear.com/root
_=/usr/bin/env
22
Neil

Selon problème de composition de docker # 745 :

Par défaut, Compose base le nom du projet sur le nom de base des commandes de composition du répertoire à partir desquelles sont exécutées. Le nom du projet peut être remplacé soit en passant une option -p/--project-name pour chaque commande, soit en définissant la variable d'environnement COMPOSE_PROJECT_NAME.

Vous pouvez définir le préfixe de votre choix pour les noms de vos conteneurs en écrivant quelque chose comme ceci:

$ docker-compose -p MY_PROJECT_NAME

ce qui équivaut à (le plus lisible):

$ docker-compose --project-name MY_PROJECT_NAME
20
Arnaud Leymet

Vous pouvez simplement définir le nom du conteneur comme vous le souhaitez via container_name:

redis:
    build: ../storage/redis
    container_name: redis
    ports:
      - "6379:6379"

Et le nom d'hôte du conteneur peut également être défini via hostname.

12
Hongbo Liu

Docker compose utilisera le nom du répertoire avec votre fichier de composition comme nom du projet, sauf si vous le définissez si via l'option - p

-p, --project-name NAME     Specify an alternate project name (default: directory name)

Compose prend en charge la déclaration variables d'environnement par défaut dans un fichier d'environnement nommé .env placé dans le dossier où la commande docker-compose est exécutée (répertoire de travail actuel).

Où vous voudrez définir COMPOSE_PROJECT_NAME

9
denov

C'est ainsi que docker-compose les conteneurs de noms afin qu'il puisse les gérer.

Le nom de base est le nom du répertoire contenant le docker-compose.yaml fichier. Ceci est suivi du nom du conteneur comme spécifié dans votre docker-compose.yaml fichier, et enfin qui est suivi d'un numéro d'instance qui augmente si vous affichez plusieurs instances d'un conteneur en utilisant quelque chose comme docker-compose scale.

Ce schéma de dénomination permet à docker-compose d'identifier vos conteneurs lorsque vous essayez de les utiliser en utilisant quelque chose comme docker-compose stop.

Je ne pense pas que cela entre en conflit avec la documentation. Autrement dit, si je commence par, disons, ce docker-compose.yaml dans un répertoire nommé sotest:

irc:
  image: docker.io/xena/elemental-ircd
  links:
    - web

web:
  image: larsks/thttpd

Et puis faites apparaître la composition:

$ docker-compose up

Je reçois deux conteneurs:

CONTAINER ID        IMAGE                           ...NAMES
960c1491c03e        docker.io/xena/elemental-ircd   ...sotest_irc_1
422bba313e71        larsks/thttpd                   ...sotest_web_1

Si je regarde le /etc/hosts fichier à l'intérieur de sotest_irc_1, Je vois:

172.17.0.28 web 422bba313e71 sotest_web_1

En plus d'un certain nombre d'autres noms. L'hôte lié est donc disponible par nom, comme décrit dans la documentation.

5
larsks