docker-compose образ с именем: «prefix_% s_1» вместо «% s»

Когда я настраиваю пару контейнеров Docker в файле docker-compose.yaml со ссылками, имя контейнеров заканчивается в формате prefix_%s_1 вместо %s и псевдоним в /etc/hosts для контейнера ссылок тоже самое.

Почему псевдоним контейнера redis test_redis_1 вместо redis?

Вот соответствующие файлы и вывод:

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

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

После запуска 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

Вывод из контейнера test_monkey_1:

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
12 голосов | спросил Neil 9 +03002015-10-09T21:58:19+03:00312015bEurope/MoscowFri, 09 Oct 2015 21:58:19 +0300 2015, 21:58:19

4 ответа


0

Согласно проблеме составления докера # 745 :

  

По умолчанию Compose основывает имя проекта на базовом имени   команды создания каталога запускаются из. Название проекта может быть   может быть переопределено путем передачи опции -p /--project-name для каждого   команда или установка переменной среды COMPOSE_PROJECT_NAME.

Вы можете установить префикс по своему выбору для имен контейнеров, написав что-то вроде этого:

 $ docker-compose -p MY_PROJECT_NAME
ответил Arnaud Leymet 19 MonEurope/Moscow2016-12-19T15:46:25+03:00Europe/Moscow12bEurope/MoscowMon, 19 Dec 2016 15:46:25 +0300 2016, 15:46:25
0

Вы можете просто установить желаемое имя контейнера с помощью container_name:

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

И имя хоста контейнера также можно задать с помощью hostname.

ответил Hongbo Liu 15 Mayam18 2018, 07:14:38
0

Docker compose будет использовать имя каталога с вашим файлом compose в качестве имени проекта, если вы не зададите его через - параметр p

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

Compose поддерживает объявление переменных среды по умолчанию в файле среды с именем .env . в папке, где выполняется команда docker-compose (текущий рабочий каталог).

Где вы хотите установить COMPOSE_PROJECT_NAME

ответил denov 10 J0000006Europe/Moscow 2017, 21:17:51
0

Именно так Docker создает составы контейнеров имен, чтобы он мог ими управлять.

Базовое имя - это имя каталога, содержащего файл docker-compose.yaml. Далее следует имя контейнера, указанное в вашем файле docker-compose.yaml, и, наконец, номер экземпляра, который увеличивается, если вы вызвать несколько экземпляров контейнера, используя что-то вроде docker-compose scale.

Эта схема именования позволяет docker-compose идентифицировать ваши контейнеры, когда вы пытаетесь работать с ними, используя что-то вроде docker-compose stop.

Я не думаю, что это каким-либо образом противоречит документации. То есть, если я начну, скажем, с этого docker-compose.yaml в каталоге с именем sotest:

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

web:
  image: larsks/thttpd

А потом выведите композицию:

$ docker-compose up

Я получаю два контейнера:

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

Если я посмотрю на файл /etc/hosts внутри sotest_irc_1 я вижу:

172.17.0.28 web 422bba313e71 sotest_web_1

В дополнение к ряду других имен. Таким образом, связанный хост доступно по названию, как описано в документации.

ответил larsks 9 +03002015-10-09T22:12:58+03:00312015bEurope/MoscowFri, 09 Oct 2015 22:12:58 +0300 2015, 22:12:58

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132