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 redis
test_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
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
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
.
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
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.