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

时间:2019-04-23 08:59:09

标签: docker docker-compose

如何在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()

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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可以直接将这些信息作为环境变量注入。)