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