Почему имя контейнера Docker имеет случайное число в конце? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть файл docker-compose.yml, как показано ниже (фрагмент):

version: '3.5'
services:
    framework:
    image: ${DOCKER_REGISTRY}/gme/fmk:${COMPOSE_PROJECT_NAME}
    build: ./fmk
    ports:
      - "2020:2020"
      - "2025:2025"
      - "4999:4999"
    volumes:
      - ${FOLDER_ENV}/workspace/logs/framework:/var/log/gcti
      - ${FOLDER_ENV}/..:/usr/local/genesys/gsg_qaart

что я получил:

vagrant@docker:/repos/gsg_qaart/docker$ docker-compose ps
]              Name                             Command               State                                             
Ports
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
callback_framework_1_df361f67842c   /bootstrap.sh                    Up      0.0.0.0:2020->2020/tcp, 0.0.0.0:2025->2025/tcp, 0.0.0.0:4999->4999/tcp, 5432/tcp

Поскольку вы видите, что имя странное, оно подразумевает "callback_framwork_1", почему в конце есть случайное число?

Кстати, я использую:

vagrant@docker:/repos/gsg_qaart/docker$ docker -v
Docker version 18.09.0, build 4d60db4
vagrant@docker:/repos/gsg_qaart/docker$ docker-compose -v
docker-compose version 1.23.1, build b02f1306

Спасибо.

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Я не могу жестко прописать имя контейнера и хочу, чтобы его можно было запускать из любого каталога.Так что я закончил сгребать часть имени:

docker exec -it $(docker ps --format='{{.Names}}' | grep server) bash
0 голосов
/ 18 декабря 2018

Обратите внимание, что другие ответы / устранение неполадок действительны / правильны, но я хотел бы дать некоторую пищу для размышлений о работе с docker-compose, несмотря на то, что docker-compose отменил изменение слагов. Есть хорошая практика, которую можно выделить при использовании сервисов docker-compose.

Мои личные мысли - докер-композитор, пытался добиться изменения в том, как их инструмент использовался. Я прочитал кое-что о github, намекавшее на это, но это мое мнение после прочтения отзывов некоторых их разработчиков, в частности, из следующего вопроса github о слизняках .

Использование внутренних сервисных механизмов docker-compose

Я пытаюсь обобщить, поскольку следующие примеры могут быть не полностью применимы к вашей установке, но тем не менее они должны быть полезны. Поскольку вы уже используете docker-compose, есть преимущество в использовании обнаружения служб, предоставляемого через сети Docker, и docker-compose по сравнению с жестким кодированием доступа через имена контейнеров.

При использовании docker-compose создаются сервисы, состоящие из 1 .. * контейнеров. В вашем примере сервис framework создается с 1 контейнером callback_framework_1_df361f67842c.

Доступ к сервису из другого док-контейнера / кода в док-контейнере

Служба может использоваться для DNS / сети вместо имен контейнеров, то есть везде <protocol>://<host>:<port>/<endpoint>, где container name использовалось в качестве <host>, service name также может использоваться в качестве <host> ( например, выполнение ping внутри другого контейнера в сети Docker):

ping <service>
ping framework

против

ping <container-name>
ping callback_framework_1_df361f67842c

Оба вышеуказанных пинга работают. Docker заботится о сети с соответствующим контейнером, далее, когда есть несколько контейнеров, составляющих службу, он заботится о запросах балансировки нагрузки к контейнерам.

Доступ к вашим контейнерам через службу с хост-машины, т.е. запуск команд docker из сценариев

Адресация, если у вас есть сценарии, выполняющиеся с хост-машины, вы также можете использовать docker-compose вместо команд docker:

docker-compose exec <service> sh
docker-compose exec framework sh

против

docker exec -it <container-name> sh
docker exec -it callback_framework_1_df361f67842c sh

docker-exec по умолчанию равен первому контейнеру, но при наличии нескольких контейнеров, составляющих службу docker, целевой контейнер может быть адресован с использованием флага --index=<index>. См. docker-compose exec документация для более подробной информации.

0 голосов
/ 16 ноября 2018

РЕДАКТИРОВАТЬ.

Это изменение отменено в v1.23.2


Так что есть важные изменения в композит v1.23, https://github.com/docker/compose/releases/tag/1.23.0

Схема именования по умолчанию для контейнеров, созданных Compose в этой версии, изменилась с project_service_index на project_service_index_slug, где slug - это случайно сгенерированная шестнадцатеричная строка.Обязательно обновите сценарии, опираясь на старую схему именования, прежде чем обновлять.

Поэтому, если вы хотите иметь детерминированное имя контейнера, используйте

services:
    framework:
        container_name: framework
...