本文介绍的方法是通过环境变量把容器自己的名字传递进去,仅支持以下两种部署方式:
docker service create
docker stack deploy
docker service create
docker service create -e MY_NAME="{{.Task.Name}}" -d --name abc tomcat:8.5-alpine
这样容器里的MY_NAME
环境变量就是容器自己的名字,比如:abc.1.rik8xgc0b9i2r7odnm6vnhnqg
docker stack deploy
docker-compose file:
version: '3.7'
services:
webapp:
image: tomcat:8.5-alpine
environment:
MY_NAME: "{{.Task.Name}}"
同样地将容器名传到环境变量MY_NAME
里。
参考资料
- Docker logging best practice,在这个文章里提到了可以用
{{.Task.Name}}
做template expansion来设置变量。 - 上述两种方式都用到了go template,Format command and log output 列举了几种template expansion的使用方式。
- Inject chosen container name in container,这个issue提出要能够在容器内获得自己的名字,但是此issue没有被解决,依然在讨论中。