如何在运行Python应用的Docker容器内获取容器名称?
获取Docker容器名称的几种方法
方法1:启动容器时手动传入容器名称作为环境变量
这是最直接的方案,不需要依赖Docker内部API或额外工具。启动容器时,通过-e参数把容器名称直接传递进去:
docker run -d --name myfancyname -e CONTAINER_NAME=myfancyname python:3.11.2-alpine your-app.py
然后在Python代码里直接读取这个环境变量:
import os container_name = os.getenv("CONTAINER_NAME") print(f"当前容器名称:{container_name}")
方法2:挂载Docker套接字,通过Docker API查询
如果不想手动传参,可以挂载Docker主机的套接字到容器内,利用Docker API根据容器ID(即HOSTNAME)反向查询名称:
步骤1:启动容器时挂载套接字
docker run -d --name myfancyname -v /var/run/docker.sock:/var/run/docker.sock python:3.11.2-alpine your-app.py
步骤2:两种实现方式
方式A:使用Python Docker SDK
先在容器内安装docker库:
pip install docker
然后编写Python代码:
import os import docker client = docker.DockerClient(base_url='unix://var/run/docker.sock') container_id = os.getenv("HOSTNAME") container = client.containers.get(container_id) container_name = container.name print(f"当前容器名称:{container_name}")
方式B:直接调用docker inspect命令
如果不想装Python SDK,可以在alpine容器内先安装docker-cli:
apk add --no-cache docker-cli
然后用Python执行命令解析结果:
import os import subprocess import json container_id = os.getenv("HOSTNAME") result = subprocess.run( ["docker", "inspect", "--format", "{{.Name}}", container_id], capture_output=True, text=True ) # 解析结果,去掉开头的/ container_name = result.stdout.strip().lstrip("/") print(f"当前容器名称:{container_name}")
注意事项
- 挂载Docker套接字会让容器拥有主机上的Docker权限,生产环境要谨慎使用,确保容器的信任度。
- 用alpine镜像时,若安装docker-cli遇到找不到包的情况,可先执行
apk update更新源。
内容的提问来源于stack exchange,提问作者kwisi
相关产品推荐
相关产品推荐

