Как изменить имя службы, сгенерированное стеком Docker, в docker-compose

При развертывании стека этого компоновочного файла с использованием:

docker stack deploy -c docker-compose.yml myapp

service-name:
    image: service-image
    namelike-property: my-custom-service-name // here I would like to know the property

Сгенерированное имя службы будет myapp_service-name.

Я бы хотел, чтобы он назывался и ссылался на my-custom-service-name


person Igor L.    schedule 03.10.2017    source источник
comment
глядя на документы, это кажется невозможным. docker compose имеет параметр имени проекта, который может переопределять префикс, но в стеке, похоже, нет ничего подобного.   -  person yamenk    schedule 03.10.2017


Ответы (4)


Для связи между службами вы можете использовать имя службы, как определено в файле компоновки (в вашем случае имя вашей службы — имя службы), если обе службы взаимодействуют в одной сети.

Когда вы делаете docker service ls, имя стека будет отображаться перед каждой службой. Это сделано потому, что можно иметь две службы с одинаковым именем, которые не находятся в общей сети. Вы не можете изменить это, и в этом нет смысла, потому что это имя не важно и на самом деле является просто идентификатором. Однако вы можете изменить имя своего стека, чтобы получить ${StackNameILike}:${ServiceNameILike}.

person herm    schedule 03.10.2017
comment
Как я могу изменить имя контейнера, созданного с помощью сервисов в docker-compose 3 - person ugur; 13.09.2018
comment
Насколько я знаю, вы не можете. Службы поддерживают множество реплик, а имена контейнеров не подходят для этого мира. - person herm; 24.09.2018
comment
Все, что мне нужно, это удалить символ подчеркивания (_), отделяющий стек от имени службы; это возможно в любом случае? - person A.J Alhorr; 31.03.2021

Я не думаю, что это поддерживается (пока).

docker service поддерживает это

#!/bin/bash

SERVICE_NAME=myservice

docker service create \
  --name $SERVICE_NAME \
  --hostname $SERVICE_NAME \
  --network myoverlayattachableswarmscopednetwork \
  # IMAGE GOES HERE

Я смог войти в службу и пропинговать другую в той же сети по имени, которое я указал.

Например

docker exec -it $(docker ps -q -f name=myotherservice) bash
ping myservice

обратите внимание, что container_name не поддерживается в файле docker-compose.yml при использовании docker stack up|deploy

person Jonathan Komar    schedule 27.10.2019

Я думаю, вы можете использовать «container_name», чтобы указать имя контейнера в вашем файле yml. Некоторым нравится:

service-name:
    image: service-image
    container_name: my-custom-service-name
person Leandro Sá    schedule 11.12.2019
comment
Как сказано в документе: docs.docker.com/compose/compose-file/# container_name Параметр container_name игнорируется при развертывании стека в режиме swarm. - person Ivan Gonzalez; 09.05.2020

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

service-name:
  image: ....
  network:
    my-network:
      aliases:
        - ref-name
person byram    schedule 19.11.2020