首页 > 解决方案 > Docker compose 给出错误容器名称已被占用

问题描述

我的用例是我需要使用 Mongodb 和 InfluxDb 等 3rd 方服务的容器作为我完整 docker 服务设置的一部分。这些 3rd 方服务的容器可能存在也可能不存在于我的机器中。我想使用相同的容器并防止 docker compose 如果它们已经存在则重新创建它们,如果它们不存在则重新创建它们。

我创建了一个 docker compose 文件,如下所示:

version: "3.7"
services:
  mongo-database:
    container_name: mongo
    image: mongo:${Mongo_Service_Version}
    restart: always
    ports: 
     - "30041:27017"
    networks: 
     - internal-network
    volumes: 
     - data:/data/db
  service-test:
    container_name: service-test
    image:service1:v1
    restart: always
    ports: 
     - "30091:80"
    networks: 
     - internal-network
    depends_on: 
     - mongo-database

我创建了一个 mongo 服务,然后创建了一个依赖于 mongo 服务的应用程序服务测试。(注:服务测试仅用于演示目的)

我面临的问题是,当我运行 docker-compose 命令来启动服务时,我能够成功地做到这一点。docker compose 首先创建一个 mongo 容器,然后创建一个服务容器,但问题是如果已经存在同名和相同配置的 mongo 容器,docker compose 会给出错误,即同名容器已经存在。我的用例是我不想手动删除旧容器并使用 docker-compose 重新创建它。我的期望是 docker compose 足够聪明来处理这种情况。如果容器已经存在,Docker compose 不应尝试重新创建它。

如果只是服务版本升级并且我们运行 docker compose 命令,docker compose 表现得很聪明并且不会重新创建 mongo 容器,但是为什么在单独/手动创建 mongo 容器时它不会表现得很聪明。

标签: dockerdocker-compose

解决方案


推荐阅读