You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose down未删除容器,部署时容器名冲突问题排查

容器名冲突问题排查

部署时频繁遇到容器名冲突错误,错误信息如下:

err: Error response from daemon: Conflict. The container name "/***-strapi-1" is already in use by container "f728e54d6ecf05e9be481c94e0f3aa6725ea711ad16ee8feb72cd910818d3ef2". You have to remove (or rename) that container to be able to reuse that name.

尽管在GitHub Actions部署文件中已明确执行容器栈的down操作,仍出现该问题,部署脚本如下:

- name: Run the docker-compose.prod.yml stack
  uses: appleboy/ssh-action@v0.1.6
  with:
    host: ${{ secrets.HOST }}
    username: ${{ secrets.USERNAME }}
    key: ${{ secrets.PRIVATE_KEY }}
    passphrase: ${{ secrets.PASSPHRASE }}
    script: |
      echo ${{ secrets.CR_PAT }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin
      export DATABASE_HOST=${{ secrets.DATABASE_HOST }}
      export DATABASE_PORT=${{ secrets.DATABASE_PORT }}
      export DATABASE_NAME=${{ secrets.DATABASE_NAME }}
      export DATABASE_USERNAME=${{ secrets.DATABASE_USERNAME }}
      export DATABASE_PASSWORD=${{ secrets.DATABASE_PASSWORD }}
      export APP_KEYS=${{ secrets.APP_KEYS }}
      export API_TOKEN_SALT=${{ secrets.API_TOKEN_SALT }}
      export ADMIN_JWT_SECRET=${{ secrets.ADMIN_JWT_SECRET }}
      export JWT_SECRET=${{ secrets.JWT_SECRET }}
      export R2_ACCESS_KEY_ID=${{ secrets.R2_ACCESS_KEY_ID }}
      export R2_ACCESS_SECRET=${{ secrets.R2_ACCESS_SECRET }}
      export R2_ENDPOINT=${{ secrets.R2_ENDPOINT }}
      export R2_BUCKET=${{ secrets.R2_BUCKET }}
      export R2_PUBLIC_ACCESS_URL=${{ secrets.R2_PUBLIC_ACCESS_URL }}
      export APP_URL=${{ secrets.APP_URL }}
      docker compose -f docker-compose.prod.yml down
      docker compose -f docker-compose.prod.yml pull
      docker compose -f docker-compose.prod.yml up -d

可能的原因

  • docker compose down执行失败未终止流程:如果down命令因容器无响应、权限不足、网络中断等原因执行失败,但脚本默认会继续执行后续命令,导致up -d尝试创建容器时旧容器仍存在。建议在down后添加错误检查,比如docker compose -f docker-compose.prod.yml down || exit 1,确保失败时停止后续步骤。

  • 容器处于不可终止状态:部分容器可能因进程僵死、资源占用等原因,无法被down命令正常停止和删除。可以通过docker ps -a查看容器状态,若存在已退出但未删除或仍在运行的目标容器,需强制删除,比如追加docker compose rm -f或docker rm -f ***-strapi-1命令。

  • docker compose环境变量不匹配:若脚本设置的环境变量与docker-compose.prod.yml配置冲突,比如COMPOSE_PROJECT_NAME不一致,down只会删除对应项目名的容器,旧容器因属于其他项目名未被清理。需在脚本中统一设置COMPOSE_PROJECT_NAME,确保down和up使用完全一致的环境变量和配置文件。

  • 并发部署导致冲突:多个GitHub Actions工作流同时执行部署脚本时,可能出现一个流程执行down后,另一个流程未完成up,或两个流程同时创建容器的情况。需添加部署锁,确保同一时间只有一个部署任务执行。

  • 旧容器不属于当前docker-compose栈:若之前手动创建过同名容器,或其他部署脚本生成了该容器,当前docker compose down只会删除通过当前配置文件创建的容器,旧容器不会被清理。这种情况需手动删除旧容器,或在部署脚本中先检查并强制删除同名容器。

内容的提问来源于stack exchange,提问作者user9132502

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:03:20