如何全局显示 docker-compose 创建的所有 运行 容器,而不考虑 docker-compose.yml

How to show all running containers created by docker-compose, globally, regardless of docker-compose.yml

我有几个 docker-compose.yml 文件,运行 可以 docker-compose up,单独。

每个 docker-compose 运行多个容器。

它们起来后,我看不到什么容器都起来了docker ps
我可以看到带有 docker-compose ps 的内容,但仅限于特定的 docker-compose.yml.

我想访问容器状态的全局轮询​​。

如何列出所有 运行 个容器,无论其来源如何?

这里是根据你问题的线索进行的猜测。

当您通过 docker-compose up 执行 运行 个容器时,请注意按 CTRL+C 将实际上 停止 你的容器。

这是一个这样做的例子:

$ docker-compose up
[+] Running 1/0
 ⠿ Container docker-test-1  Created                                  0.0s
Attaching to docker-test-1
^CGracefully stopping... (press Ctrl+C again to force)
[+] Running 1/1
 ⠿ Container docker-test-1  Stopped                                 10.2s
canceled

这里的重要部分是:^CGracefully stopping...

如果你想保留它们 运行ning,你必须 运行 docker-compose updetached 模式下,借助帮助-d 选项。

-d, --detach       Detached mode: Run containers in the background,
                   print new container names. Incompatible with
                   --abort-on-container-exit.

来源:https://docs.docker.com/compose/reference/up/


这样做,

docker-compose up -d && docker ps

实际上应该给你你所期望的。
例如:

$ docker-compose up -d && docker ps
[+] Running 2/2
 ⠿ Network docker_default   Created                                                                                   0.1s
 ⠿ Container docker-test-1  Started                                                                                   0.5s
CONTAINER ID   IMAGE     COMMAND               CREATED        STATUS                  PORTS     NAMES
ab9f422247c9   alpine    "tail -f /dev/null"   1 second ago   Up Less than a second             docker-test-1

如果您想查看所有容器,无论其状态如何,您可以使用 docker ps-a 选项。

--all , -a        Show all containers (default shows just running)

来源:https://docs.docker.com/engine/reference/commandline/ps/

例如:

$ docker-compose up  
[+] Running 2/2
 ⠿ Network docker_default   Created                                                                                   0.1s
 ⠿ Container docker-test-1  Created                                                                                   0.1s
Attaching to docker-test-1
^CGracefully stopping... (press Ctrl+C again to force)
[+] Running 1/1
 ⠿ Container docker-test-1  Stopped                                                                                  10.2s
canceled
$ docker ps -a
CONTAINER ID   IMAGE                 COMMAND               CREATED          STATUS                       PORTS     NAMES
615bcc6f1e50   alpine                "tail -f /dev/null"   18 seconds ago   Exited (137) 3 seconds ago             docker-test-1

Docker compose 为它创建的每个容器添加标签。如果要获取compose创建的所有容器,可以执行container ls并应用过滤器。

docker container ls --filter label=com.docker.compose.project

这将显示由 compose 创建的所有 运行 容器,无论项目名称如何。

例如,我从不同的 compose 项目中创建了一些容器。使用过滤器,我只得到那些,但没有其他容器不是由 compose 创建的,因此没有项目标签。

$ base='{{.Status}}\t{{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Ports}}\t{{.Networks}}\t{{.Mounts}}'
$ compose='{{.Label "com.docker.compose.project"}}\t{{.Label "com.docker.compose.service"}}'

$ docker container ls --all \
  --filter label=com.docker.compose.project \
  --format "table $compose\t$base"

project        service     STATUS                      CONTAINER ID   NAMES                IMAGE                   PORTS                                                                     NETWORKS               MOUNTS
kafka          kafka       Up 5 minutes                3f97a460266e   kafka_kafka_1        bitnami/kafka:3         0.0.0.0:9092->9092/tcp, :::9092->9092/tcp                                 kafka_default          kafka_kafka_da…,kafka_kafa_con…
kafka          zookeeper   Up 5 minutes                0b6f32ccd196   kafka_zookeeper_1    bitnami/zookeeper:3.7   2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 8080/tcp   kafka_default          kafka_zookeepe…
manager        db          Up 22 minutes               4f0e799b4fd7   manager_db_1         da2cb49d7a8d            5432/tcp                                                                  manager_default        0d667a0e48a280…
foo            db          Exited (0) 37 minutes ago   e106c5cdbf5e   foo_db_1             da2cb49d7a8d                                                                                      foo_default            5a87e93627b8f6…
foo            backend     Up 10 minutes               08a0873c0587   foo_backend_2        c316d5a335a5            80/tcp                                                                    foo_default            
foo            frontend    Up 10 minutes               be723bf41aeb   foo_frontend_1       c316d5a335a5            80/tcp                                                                    foo_default            
foo            backend     Up 10 minutes               5d91d4bcfcb3   foo_backend_1        c316d5a335a5            80/tcp                                                                    foo_default            
manager        app         Up 22 minutes               2ca4c0920807   manager_app_1        c316d5a335a5            80/tcp                                                                    manager_default        
manager        app         Up 22 minutes               b2fa2b9724b0   manager_app_2        c316d5a335a5            80/tcp                                                                    manager_default        
loadbalancer   app         Exited (0) 37 minutes ago   791f4059b4af   loadbalancer_app_1   c316d5a335a5                                                                                      loadbalancer_default   

如果您想查看所有容器而不考虑它们的状态,您可以将 --all 或简短的 -a 标志添加到 ls 命令,就像我在示例中所做的那样。否则,仅显示 运行 个容器。