簡體   English   中英

docker-compose ps 不顯示正在運行的服務

[英]docker-compose ps does not show running services

I have a docker-compose stack launched on a remote machine, through gitlab CI/CD (a runner connects to the docker engine on the remote machine and performs the deploy with 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 docker-machine執行與遠程服務器的 docker 引擎的連接。

似乎在調用docker-compose命令時指定項目名稱可以解決問題。

這可以在兩個客戶端上使用命令行中的-p參數或COMPOSE_PROJECT_NAME環境變量來完成。

由於某些原因,這在以前的項目中是不需要的。 可能是docker的變化(我是從18改到19的),或者別的什么,具體還是不知道。

而不是使用docker-compose ps您可以嘗試docker ps -a並從那里開始工作。

假設您可以簡單地丟棄容器,您可以通過調用以下方法強制刪除:

docker rm -f 40586885
docker network rm webproxy

就我而言,問題是項目名稱 into.env 文件

docker compose 3.7, docker 最新版本 (2022-07-17)

COMPOSE_PROJECT_NAME = demo.sitedomain-testing.com

撰寫項目名稱不支持點 (.)。 我剛被hifen取代,效果很好。

COMPOSE_PROJECT_NAME = demo-sitedomain-testing-com

另外,容器名稱也一樣,不支持點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM