Используйте имя или идентификатор контейнера в качестве переменной среды в docker compose yml

#docker #docker-compose

#docker #docker-compose

Вопрос:

Как я могу использовать имя или идентификатор контейнера в качестве переменной env в docker-compose.yml ?

Я пробовал несколько способов (ни один не подходит):

 environment:
  SERVER_NAME: "${SERVER_NAME}"
  SERVER_NAME: container_name
  SERVER_NAME: {{container_name}}
  SERVER_NAME: "${container_name}"
  SERVER_NAME: "{{.Host.Hostname}}"
  SERVER_NAME: "{{.Container.external_id}}"
  SERVER_NAME: "{{.Container.External_id}}"
  SERVER_NAME: "${HOSTNAME}"
  

РЕШАЕТСЯ в моем коде Python:

 import socket
SERVER_NAME = socket.gethostname()
  

Комментарии:

1. Я не уверен, что мой ответ решает вашу проблему, пожалуйста, дайте мне знать, помогает это или нет.

2. Зачем вам нужна эта часть информации; и, в частности, в качестве переменной среды?

3. @DavidMaze У меня есть скрипт (javascript python), который отправляет журналы sentry. Я хочу, чтобы идентификатор контейнера был тегом в каждом элементе журнала.

Ответ №1:

Одним из способов является установка имени контейнера:

 services:
  <service>:
    image: <image>
    container_name: <container_name>
    # ^ explicitly set the container's name
  

а затем используйте его ( <container_name> ) везде, где захотите.

Ответ №2:

Если вы явно не переопределите это, имя хоста контейнера (1) является его идентификатором контейнера. Вы можете убедиться в этом с помощью простого эксперимента:

 $ docker run busybox hostname
cb8ad16c0a67
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
cb8ad16c0a67        busybox             "hostname"          3 seconds ago       Exited (0) 2 seconds ago                       jolly_hodgkin
  

Документация Sentry предполагает, что это имя хоста станет значением по умолчанию для serverName параметра конфигурации, хотя это стоит проверить. Вы можете представить другую информацию, такую как имя изображения, тег и имя хоста сервера, которые вы также можете захотеть включить в отчеты об ошибках; их сложнее обнаружить контейнерному процессу самостоятельно, и вам нужно ввести их через переменные среды или что-то подобное, но они также гораздо менее изменчивы.

(В контексте Kubernetes нисходящий API может напрямую вводить эту информацию в качестве переменных среды.)