如何在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()
除非您明确覆盖它,否则容器的主机名(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可以直接将此信息作为环境变量注入。)
一种方法是设置容器名称:
services:
<service>:
image: <image>
container_name: <container_name>
# ^ explicitly set the container's name
然后在任何地方使用它(<container_name>
)。