为何Docker Compose会覆盖yml文件中指定的容器名称?
Docker Compose容器名称被修改的原因及解决办法
问题原因
你在docker-compose.yml里写的redis-server是服务名称,不是容器名称。Docker Compose默认会按照[项目名]_[服务名]_[实例序号]的规则生成容器名称:
- 项目名默认是Compose文件所在目录的名称(你的目录应该叫
redis,所以前缀是redis_) - 实例序号是为了支持多实例部署,默认从1开始
所以最终容器名变成了redis_redis-server_1。
解决方案
有两种方式可以得到你想要的redis-server容器名:
方法1:直接指定容器名称
在docker-compose.yml中给服务添加container_name字段,明确指定容器名:
version: '3' services: redis-server: image: 'redis' container_name: redis-server
运行docker-compose up后,容器名称就会是redis-server。
注意:用这个方式后,该服务只能运行一个实例,因为Docker不允许存在同名容器。
方法2:修改项目名称
如果不想固定容器名,但想修改前缀,可以通过-p参数指定项目名,或者设置环境变量:
- 命令行临时指定:
docker-compose -p myproject up
此时容器名会变成myproject_redis-server_1。
- 设置环境变量(当前终端内永久生效):
export COMPOSE_PROJECT_NAME=myproject docker-compose up
验证
修改配置或指定项目名后,重新运行docker-compose up,再执行docker ps就能看到符合预期的容器名称了。
内容的提问来源于stack exchange,提问作者user299702
相关产品推荐
相关产品推荐

