如何检查docker是否正在运行

use*_*392 60 bash docker

我是码头工人的新手.我正在为docker编写一个简单的脚本.我需要检查docker是否正在运行.是否有命令检查容器名称

BMi*_*tch 67

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

docker inspect -f '{{.State.Running}}' $container_name
Run Code Online (Sandbox Code Playgroud)

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

systemctl show --property ActiveState docker
Run Code Online (Sandbox Code Playgroud)

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

  • `if [$(docker inspect -f'{{.State.Running}}'$ container_name)="true"]; 然后回声呀; 否则回应不; fi` (8认同)
  • 我使用 `docker inspect -f '{{.State.Restarting}}' $container_name` 因为我使用重启策略启动我的容器,尽管这里“true”是你想要避免的。 (2认同)
  • 当容器未运行时,bash和docker都将抱怨上述`if`语句。这为错误的情况隐藏了不必要的提示:`if [“ $(docker inspect -f'{{.State.Running}}'$ {container_name} 2> / dev / null)” =“ true”]; 然后回声 否则回声不; fi (2认同)
  • @MarcoLackovic 听起来你错过了上面的“你已经安装了 systemd”部分。 (2认同)

ran*_*rol 20

我最终使用

docker info
Run Code Online (Sandbox Code Playgroud)

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

  • 这个答案被低估了。它是跨平台的,通过/失败很快。 (10认同)
  • `docker info > /dev/null 2>&1` 如果你不需要输出 (5认同)

Her*_*cia 18

你可以使用以下方法检查码头状态: systemctl is-active docker

?  ~  systemctl is-active docker
active
Run Code Online (Sandbox Code Playgroud)

你可以用它作为:

?  ~  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 *
Run Code Online (Sandbox Code Playgroud)


Emi*_*ska 10

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

if docker ps | grep -q keyword
then 
    echo "Running!"
else
    echo "Not running!"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

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


小智 9

列出所有容器:
docker container ls -a
ls = list
-a =全部

检查列“状态”


小智 8

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

docker inspect postgres | grep "Running"
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助。


小智 6

对于OS X用户(Mojave 10.14.3)

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

# Check if docker is running
docker_state=$(docker info >/dev/null 2>&1)
if [[ $? -ne 0 ]]; then
    echo "Docker does not seem to be running, run it first and retry"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)


小智 6

在终端中运行此命令:

docker ps
Run Code Online (Sandbox Code Playgroud)

如果 docker 没有运行,您将收到以下消息:

来自守护进程的错误响应:拨打unix docker.raw.sock:连接:连接被拒绝


hag*_*wal 6

有关第一个问题的答案,请参阅此答案 - /sf/answers/4581349391/

对于您的第二个问题 - 您可以使用 like 命令docker ps --filter "name=<<<YOUR_CONTAINER_NAME>>>"来检查特定容器是否正在运行。

  • 如果 Docker 和 Container 都在运行,那么您将获得如下输出:

    $ docker ps --filter "name=nostalgic_stallman"
    
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES       
    9b6247364a03        busybox             "top"               2 minutes ago       Up 2 minutes                            nostalgic_stallman
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果 Docker 未运行,您将收到一条错误消息,指出 docker daemon 未运行。

  • 如果 Docker 正在运行但 Container 没有运行,那么您将不会在此命令的输出中获得容器名称。


Gle*_*rce 5

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

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


Naa*_*nii 5

您可以使用此命令检查systemctl status docker它会显示 docker 的状态。如果你想开始,你可以使用systemctl start docker而不是systemctl你也可以分别尝试使用service,service docker statusservice docker start

  • 这个答案假设最终用户使用 `systemd` 作为他们的 init。 (5认同)

Mar*_*vic 5

跑步:

docker version
Run Code Online (Sandbox Code Playgroud)

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

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

Server: Docker Engine - Community
 Engine:
  Version:          ...
 [omitted]
Run Code Online (Sandbox Code Playgroud)

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

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

Error response from daemon: Bad response from Docker engine
Run Code Online (Sandbox Code Playgroud)


小智 5

docker ps -a

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


小智 5

容器状态:真/假

# docker inspect --format '{{json .State.Running}}' container-name
true
#
Run Code Online (Sandbox Code Playgroud)

  • 请在您的答案中添加一些解释,以便其他人可以从中学习 (3认同)
  • 这似乎不再起作用了。“State”不是返回的 JSOn 中的键之一。也没有看到任何有关跑步或健康的信息。但它已经启动了,并且我收到了 JSON 响应。 (2认同)