如何在docker-compose中为每个副本设置自定义唯一主机名
解决方案
Docker Compose 支持使用部署模板变量为多副本实例生成唯一主机名,你只需要在app服务配置中新增hostname字段,使用{{.Task.Slot}}内置变量即可,这个变量会自动替换为每个副本的序号(从1开始递增),保证每个实例主机名唯一。
修改后的完整配置如下:
version: '3.8' # 建议升级到3.8及以上版本保证模板变量兼容性 services: app: build: context: . dockerfile: Dockerfile command: "/app/main" hostname: "app-{{.Task.Slot}}" # 新增该行,每个实例会自动生成app-1、app-2、app-3的主机名 expose: - "8080" deploy: replicas: 3 nginx: image: nginx:latest volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro depends_on: - app ports: - "4000:4000"
验证方式
- 部署完成后执行
docker compose ps查看所有运行的容器 - 任选一个app容器执行命令查看主机名:
docker exec <对应app容器名> hostname,会返回对应序号的自定义主机名 - 业务代码中可以直接读取系统
HOSTNAME环境变量、或者调用hostname系统调用获取该唯一标识
注意事项
container_name字段不支持该模板变量,无需尝试用这个字段自定义副本名称,仅设置hostname即可满足实例识别需求。
内容的提问来源于stack exchange,提问作者Ashmeet Singh
相关产品推荐
相关产品推荐

