docker-compose服务名称和容器名称区别
需求及结论在docker-compose文件一般书写如下version: 3.8 x-logging: default-logging options: max-size: 200m max-file: 5 driver: json-file x-environment: default-environment TZ: Asia/Shanghai LANG: C.UTF-8 services: common-redis: image: redis:6.2 container_name: demo35-redis ports: - 3535:6379 network_mode: demo35 restart: always environment: *default-environment logging: *default-logging networks: demo35: external: true其中common-redis是服务名称demo35-redis是容器名称一般在使用的时候都写成一样的。但是由于公司正在开发项目太多每次都改docker-compose文件的很多地方比如容器名、服务名这些。非常繁琐而且容易出错。就在想如果同一台服务器不同docker-compose文件中服务名称可以一致容器名称需要同一台服务器唯一。那就可以把容器名称配置成占位符服务名称不变减少工作量。先说结论上述猜想正确同一台服务器容器名称必须唯一但是服务名称只需要保证同一个docker-compose中唯一即可。但是需要确保两个docker-compose文件在不同目录中。测试过程测试的目录结构如下:docker_test ├── docker35 │ └── docker-compose-demo35.yml └── docker36 └── docker-compose-demo36.ymldocker-compose-demo35.yml文件内容version: 3.8 x-logging: default-logging options: max-size: 200m max-file: 5 driver: json-file x-environment: default-environment TZ: Asia/Shanghai LANG: C.UTF-8 services: common-redis: image: redis:6.2 container_name: demo35-redis ports: - 3535:6379 network_mode: demo35 restart: always environment: *default-environment logging: *default-logging networks: demo35: external: truedocker-compose-demo36.yml文件内容version: 3 x-logging: default-logging options: max-size: 200m max-file: 5 driver: json-file x-environment: default-environment TZ: Asia/Shanghai LANG: C.UTF-8 services: common-redis: image: redis:6.2 container_name: demo36-redis ports: - 3636:6379 network_mode: demo36 restart: always environment: *default-environment logging: *default-logging networks: demo36: external: true可以看到上述两个文件服务名称一致都是common-redis,但是容器名称不一致分别为demo35-redis和demo36-redis。启动demo35文件夹下的服务使用docker-compose -f docker-compose-demo35.yml up -d启动docker36文件夹下的服务使用docker-compose -f docker-compose-demo36.yml up -d查看服务是否正常发现两个服务均正常启动。服务名称和容器名称的区别1. 服务名称表示docker-compose中的服务名如果使用docker-compose start等命令进行操作的时候指定的是服务名而不是容器名比如docker-compose start common-redis。服务名称是docker-compose文件唯一的。两个或者多个docker-compose可以不唯一。比如上述两个文件都叫common-redis。docker-compose ps 看到的是服务名称。2. 容器名称是容器的名字同一个服务器上只能有一个正常运行的同名容器我们在docker ps时候看到的是容器名。