docker-compose ps 不显示正在运行的服务

Gug*_*ata 5 docker docker-compose docker-machine

我在远程机器上启动了一个 docker-compose 堆栈,通过 gitlab CI/CD(运行程序连接到远程机器上的 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.
Run Code Online (Sandbox Code Playgroud)

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

这发生在笔记本电脑 (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
Run Code Online (Sandbox Code Playgroud)

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

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

                        +-----------------+                          
                        |                 |                          
                        |  Remote server  |                          
                        |                 |                          
                        +----|--------|---+                          
                             |        |                              
                             |        |                              
            docker-compose ps|        |docker-compose up -d          
                             |        |                              
                             |        |                              
+-------------------+        |        |        +--------------------+
|                   |        |        |        |                    |
|  Docker client 1  ---------+        +---------  Docker client 2   |
|                   |                          |                    |
+-------------------+                          +--------------------+
Run Code Online (Sandbox Code Playgroud)

到远程服务器的 docker 引擎的连接是通过docker-machine.

Gug*_*ata 6

看来,在调用docker-compose命令时指定项目名称可以解决该问题。

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

由于某些原因,在以前的项目中不需要这样做。可能是docker的变化(我从18改成了19),也可能是别的什么,具体细节我还不清楚。


ric*_*yen 0

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

假设您可以简单地丢弃容器,您可以通过调用以下命令来暴力删除:

docker rm -f 40586885
docker network rm webproxy
Run Code Online (Sandbox Code Playgroud)