使用 Docker Compose 创建同一服务的多个容器

Posted

技术标签:

【中文标题】使用 Docker Compose 创建同一服务的多个容器【英文标题】:Create multiple containers of the same service with Docker Compose 【发布时间】:2022-01-05 22:21:08 【问题描述】:

我目前正在使用 Docker Compose,我想知道如何为同一服务“Redis”创建多个容器。我已经尝试过使用 docker-compose up --scale redis=3,但它给出了一个错误,我一直在通过谷歌搜索可能的解决方案,但我找不到。

提前谢谢你。

这是我的 docker-compose.yml

version: '3'
services:
  redis:
    container_name: redis
    hostname: redis
    image: redis

  redis-commander:
    container_name: redis-dbms
    hostname: redis-commander
    image: rediscommander/redis-commander:latest
    restart: always
    environment:
    - REDIS_HOSTS=local:redis:6379
    ports:
    - "8081:8081"

这是它给我的错误。

docker-compose up --scale redis=3

Creating network "ex2_default" with the default driver
WARNING: The "redis" service is using the custom container name "redis". Docker requires each container to have a unique name. Remove the custom name to scale the service.
Creating redis-dbms ...
Creating redis      ... done
Creating redis      ...
Creating redis      ...
Creating redis-dbms ... done
ERROR: for redis  Cannot create container for service redis: Conflict. The container name "/redis" is already in use by container "d4c93ae4ca68da0b6430e5eddc657d9dda0f40002c7a81c89368535df05eae24". You have to remove (or rename) that container to be able to reuse that name.

ERROR: for redis  Cannot create container for service redis: Conflict. The container name "/redis" is already in use by container "d4c93ae4ca68da0b6430e5eddc657d9dda0f40002c7a81c89368535df05eae24". You have to remove (or rename) that container to be able to reuse that name.

【问题讨论】:

【参考方案1】:

引发错误的原因如下: 链接:https://docs.docker.com/compose/compose-file/compose-file-v3/#container_name

由于 Docker 容器名称必须是唯一的,因此如果您指定了自定义名称,则无法将服务扩展到超过 1 个容器。尝试这样做会导致错误。

您可以在此处阅读更多内容:https://github.com/docker/compose/issues/3722

【讨论】:

谢谢!,解决方案非常简单。我刚刚删除了 container_name,它起作用了。 hostname: 也几乎什么都不做,您应该同样能够将其删除。

以上是关于使用 Docker Compose 创建同一服务的多个容器的主要内容,如果未能解决你的问题,请参考以下文章

Docker compose 等待数据库服务初始化

docker-compose 使用

从同一个 docker compose 中的 docker 容器拒绝连接

docker-compose link 导致服务不可用

如何通过 ssh 进入使用 docker-compose 创建的服务

在创建其他服务之前,等待在docker compose中准备好mysql服务