如何检查 docker-compose up -d 命令的状态

问题描述 投票:0回答:5

当我们运行

docker-compose up-d
命令使用
docker-compose.yml
文件运行 docker 时,它开始构建镜像或从注册表中提取镜像。我们可以在终端上看到该命令的每一步。

我正在尝试从 python 脚本运行此命令。该命令成功启动,但在命令之后,我不知道该过程已经完成了多少。有什么方法可以监视

docker-compose up -d
命令的状态,以便脚本可以让用户(正在使用该脚本的人)知道该过程已完成多少,或者
docker-compose
命令是否由于某些原因而失败。

谢谢

代码:

from pexpect import pxssh

session = pxssh.pxssh()
if not session.login(ip_address,<USERNAME>, <PASSWORD>):
    print("SSH session failed on login")
    print(str(session))
else:
    print("SSH session login successfull")
    session.sendline("sudo docker-compose up -d")
    session.prompt()
    resp = session.before
    print(resp)
python docker docker-compose pexpect
5个回答
8
投票

您可以通过以下方式查看

docker compose
日志

  1. 使用
    docker compose up -d
    以分离模式启动所有服务 (-d) (在分离模式下您不会看到任何日志)
  2. 使用
    docker compose logs -f -t
    将自己附加到所有日志 运行服务,而
    -f
    表示您遵循日志输出和
    -t
    选项为您提供了不错的时间戳(Docs

信用

编辑:Docker Compose 现在作为核心 Docker CLI 的一部分提供。目前仍支持

docker-compose
,但我现在看到的大多数文档都将
docker compose
视为标准。请参阅 https://docs.docker.com/compose/#compose-v2-and-the-new-docker-compose-command 了解更多信息。


4
投票

我认为应该使用命令

docker-compose top
,可以检查结果,容器运行时它不应该为空。 如果容器是
stop
exit
Create
,则应返回空


2
投票

我调试小问题的方法是运行:

docker-compose up {service_name} 

这样我就可以看到单个服务的输出。如果服务具有依赖性,您始终可以启动多个服务,如下所示:

docker-compose up {service_name1} {service_name2}

另外我用:

docker-compose logs -f -t {service_name1}

查看已运行服务的日志,或者:

docker logs -t -f {container_name}

请注意,上面的命令需要 容器名称,而不是 服务名称

通过这种方式,您可以确保每个服务都按预期工作,然后您可以按照其他答案中的建议以分离模式启动它们


1
投票

如果您需要使用

bash
的编程方式,这是最快的实现:

  • 睡2秒
  • 检查容器在几秒钟前已启动 => 意味着您刚刚成功部署它

docker ps
看起来像:

a6f088b1567e   lc_fe_isr-app   "docker-entrypoint.s…"   2 seconds ago   Up 2 seconds   0.0.0.0:10001->3000/tcp   lc_fe_isr-app-1
#!/bin/bash

#
# Check if the a single container was started successfully
#
CONTAINER_NAME="lc_fe_isr-app-1"
sleep 2
docker ps | grep $CONTAINER_NAME
UP_SECONDS_AGO=`docker ps | grep $CONTAINER_NAME | grep ' seconds'`
echo $UP_SECONDS_AGO

if [ -n "$UP_SECONDS_AGO" ]
then
    echo "Deploy successfully"
else
    echo "Deploy FAILED"
    exit 1
fi

0
投票

我带来了更新的答案。要获取所有撰写服务的当前状态,您可以使用 docker compose ps 命令,如下所示(我选择最简单的格式在脚本上下文中操作它,请随意阅读 format doc):

docker compose ps --format "{{.Service}} {{.State}}"

这样你应该得到类似的东西:

service1 running
service2 paused

状态可以是

[paused | restarting | removing | running | dead | created | exited]

之一

注意: 如果您只想知道哪些服务正在运行,只需在状态上添加过滤器,如下所示:

docker compose ps --services --satus=running

获取

service1
© www.soinside.com 2019 - 2024. All rights reserved.