#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 может напрямую вводить эту информацию в качестве переменных среды.)