如何检查Docker是否正在运行


96

我是Docker的新手。我正在为docker写一个简单的脚本。我需要检查docker是否正在运行。有命令检查容器名称吗


3
任何docker命令(docker -v除外),例如docker ps
Glen Pierce's

docker attach containerName
马蒂亚恐龙

或尝试 docker ps
Mattia Dinosaur's

2
sudo systemctl状态docker
Duk

docker ps-----此命令将仅显示RUNNING容器
-Suhaib

Answers:


101

如果要查找特定的容器,可以运行:

if [ "$( docker container inspect -f '{{.State.Running}}' $container_name )" == "true" ]; then ...

为避免处于崩溃循环中的容器出现问题并不断从显示其启动状态重新开始,可以通过检查以下Status字段来改进上述内容:

if [ "$( docker container inspect -f '{{.State.Status}}' $container_name )" == "running" ]; then ...

如果您想知道dockerd是否正在本地计算机上运行,​​并且已经安装了systemd,则可以运行:

systemctl show --property ActiveState docker

您也可以使用docker info或连接到docker,docker version如果守护程序不可用,它们将出错。


您将如何在其中放入bash脚本docker inspect …if语句?
弗朗索瓦·罗曼

15
if [ $(docker inspect -f '{{.State.Running}}' $container_name) = "true" ]; then echo yup; else echo nope; fi
BMitch

2
我使用了docker inspect -f '{{.State.Restarting}}' $container_name自启动容器以来的重启策略,尽管这里您要避免使用“ true”。
stav meir

4
if当容器未运行时,bash和docker都将抱怨上述声明。这为虚假情况掩盖了不必要的喷涌: if [ "$(docker inspect -f '{{.State.Running}}' ${container_name} 2>/dev/null)" = "true" ]; then echo yup; else echo nope; fi
Trevor

1
@MarcoLackovic听起来像您错过了上面的“您已安装systemd”部分。
BMitch

43

我最终使用

docker info

使用bash脚本检查docker引擎是否正在运行。


4
这个答案被低估了。它是跨平台的,并且很快通过/失败。
安迪·弗莱明

docker info > /dev/null 2>&1如果您不需要输出
buggymcbugfix

22

您可以使用以下命令检查docker状态: systemctl is-active docker

  ~  systemctl is-active docker
active

您可以将其用作:

  ~  if [ "$(systemctl is-active docker)" = "active" ]; then echo "is alive :)" ; fi
is alive :)

  ~  sudo systemctl stop docker

  ~  if [ "$(systemctl is-active docker)" = "active" ]; then echo "is alive :)" ; fi
 * empty response *

这没有回答问题。“检查容器名称”
jens.klose

是的,问题似乎是模棱两可的,要检查容器是否正在运行,应使用docker ps --filter name=pattern,然后可以格式化输出以仅检查状态并添加以下标志:--format {{.Status}}
Hernan Garcia


14

对于OS X用户(Mojave 10.14.3)

这是我在Bash脚本中用来测试Docker是否正在运行的内容

# Check if docker is running
if ! docker info >/dev/null 2>&1; then
    echo "Docker does not seem to be running, run it first and retry"
    exit 1
fi

1
我将其重构以删除if [[ $? -ne 0 ]]反模式。
点钟

7

任何docker命令(除外docker -v),例如docker ps 如果Docker正在运行,您将获得一些有效的响应,否则您将收到一条消息,其中包括“您的docker守护进程是否已启动并正在运行?”

您也可以检查任务管理器。


7

有时您不知道完整的容器名称,在这种情况下,这对我有用:

if docker ps | grep -q keyword
then 
    echo "Running!"
else
    echo "Not running!"
    exit 1
fi

我们列出所有正在运行的容器进程(docker ps -a也会向我们显示未运行的容器进程,但这不是我所需要的),我们搜索一个特定的单词(grep一部分),如果我们没有找到至少一个名称包含我们的正在运行的容器,则会失败关键词。


重构以删除大量的Shell编程反模式
三点

5

您可以使用此命令进行检查,systemctl status docker它将显示泊坞窗的状态。如果你想创业,你可以使用systemctl start docker,而不是systemctl你还可以与尝试serviceservice docker statusservice docker start分别。


5
该答案假定最终用户将systemd其用作其init。
拉斐尔

systemctl status docker正确显示docker服务正在运行。谢谢。
imsrgadich

3

您还可以使用以下命令检查特定的Docker容器是否正在运行:

docker inspect postgres | grep "Running"

此命令将检查例如我的postgres容器是否正在运行,并且将输出返回为“ Running”:true

希望这可以帮助。


这正是我想要的。而且有效。(当人们对某事投反对票时,这是很好的做法,这样,菜鸟们就可以更好地学习礼节。:))
allenjom

我没有投下来,但“错误:没有这样的对象:Postgres的”
盖德

3

跑:

docker version

如果docker 正在运行,您将看到:

Client: Docker Engine - Community
 Version:           ...
 [omitted]

Server: Docker Engine - Community
 Engine:
  Version:          ...
 [omitted]

如果docker 没有运行,您将看到:

Client: Docker Engine - Community
 Version:           ...
 [omitted]

Error response from daemon: Bad response from Docker engine


1

在Mac上,您可能会看到该图像:

在此处输入图片说明

如果右键单击docker图标,则会看到:

在此处输入图片说明

或者:

docker ps

docker run hello-world



0

docker ps -a

您可以看到所有泊坞窗容器,无论它是活的还是死的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.