【问题标题】:docker-compose ps does not show running servicesdocker-compose ps 不显示正在运行的服务
【发布时间】:2019-10-02 23:17:37
【问题描述】:

我通过 gitlab CI/CD 在远程机器上启动了一个 docker-compose 堆栈(运行器连接到远程机器上的 docker 引擎并使用 docker-compose up -d 执行部署)。

当我从笔记本电脑使用 eval docker-machine env REMOTE_ADDRESS 连接到那台机器时,我可以看到 docker 进程正在运行(使用 docker ps),而服务堆栈似乎是空的(docker-compose ps)。

我无法使用docker-compose down 来停止堆栈,尝试docker-compose up -d 会出现错误

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

反过来也是如此,我可以从我的本地笔记本电脑启动堆栈(使用 docker-machine),但是当尝试执行 docker-compose up -d 时 CI/CD 管道失败并出现相同的错误。

在笔记本电脑 (OSX) 和运行器 (ubuntu 18.04) 上使用最新版本的 docker 和 docker-compose 会发生这种情况。

在其他情况下(约 10 个其他项目),这运行得很顺利。

这是我正在使用的docker-compose.yml 文件。

version: "3.7"

services:

  web:
    container_name: feamp_web
    restart: always
    image: guglielmo/fpa/feamp:latest
    expose:
      - "8000"
    links:
      - postgres:postgres
      - redis:redis
    environment:
      - ...
    volumes:
      - public:/app/public
      - data:/app/data
      - uwsgi_spooler:/var/lib/uwsgi
      - weblogs:/var/log
    command: /usr/local/bin/uwsgi --socket=:8000 ...

  nginx:
    container_name: feamp_nginx
    restart: always
    ...

  postgres:
    container_name: feamp_postgres
    restart: always
    image: postgres:11-alpine
    ...

  redis:
    container_name: feamp_redis
    restart: always
    image: redis:latest
    ...

volumes:
    ...

networks:
  default:
    external:
      name: webproxy

通常我可以从本地笔记本电脑从 gitlab 上的 CI/CD 管道管理堆栈,反之亦然。

此图应该有助于可视化情况。

                        +-----------------+                          
                        |                 |                          
                        |  Remote server  |                          
                        |                 |                          
                        +----|--------|---+                          
                             |        |                              
                             |        |                              
            docker-compose ps|        |docker-compose up -d          
                             |        |                              
                             |        |                              
+-------------------+        |        |        +--------------------+
|                   |        |        |        |                    |
|  Docker client 1  ---------+        +---------  Docker client 2   |
|                   |                          |                    |
+-------------------+                          +--------------------+

通过docker-machine执行与远程服务器的docker引擎的连接。

【问题讨论】:

    标签: docker docker-compose docker-machine


    【解决方案1】:

    似乎在调用docker-compose 命令时指定项目名称可以解决问题。

    这可以在两个客户端上使用命令行中的-p 参数或COMPOSE_PROJECT_NAME 环境变量来完成。

    由于某些原因,以前的项目不需要这样做。 可能是docker变了(我是从18改到19),或者别的什么,具体还是不知道。

    【讨论】:

      【解决方案2】:

      您可以尝试docker ps -a,而不是使用docker-compose ps,然后从那里开始工作。

      假设你可以简单地丢弃容器,你可以通过调用暴力删除:

      docker rm -f 40586885
      docker network rm webproxy
      

      【讨论】:

      • 感谢您的回复。但是请看,虽然我可以查看和管理 docker 容器,但我无法通过 docker-compose 处理它们,而我通常会这样做。这里一定有什么不同,那就是锁定 normal 行为。
      • docker-compose ps -a 带给你什么?
      • 它给出了一个空的响应。
      • 那么docker ps -a 给出了什么?如果它也没有显示麻烦的容器,则可能存在某种损坏和/或您需要重新启动 docker 或在文件系统中做一些事情
      • 不,它确实显示了完整的堆栈,以及正确的容器名称(在我的例子中,feamp_webfeamp_postgres 等等)。这正是我卡住的地方。
      猜你喜欢
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 2016-11-09
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      相关资源
      最近更新 更多