在docker compose yml中使用容器名称或id作为环境变量

问题描述 投票:1回答:2

如何在docker-compose.yml中将容器的名称或ID用作env变量?

我试过多种方式(没有人好):

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()
docker docker-compose
2个回答
1
投票

除非您明确覆盖它,否则容器的主机名(1)是其容器ID。你可以通过一个简单的实验看到这个:

$ 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 documentation建议此主机名将成为serverName配置选项的默认值,但值得验证。您可以想象其他信息,例如您可能还希望包含在错误报告中的图像名称,标记和服务器主机名;这些容器进程难以自行发现,你需要通过环境变量或类似的东西将它们推入,但它们的变量也要小得多。

(在Kubernetes上下文中,downward API可以直接将此信息作为环境变量注入。)


2
投票

一种方法是设置容器名称:

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

然后在任何地方使用它(<container_name>)。

© www.soinside.com 2019 - 2024. All rights reserved.