如何检查docker守护程序是否正在运行?

Mar*_*ada 21 bash shell docker

我正在尝试创建一个bash实用程序脚本来检查我的服务器中是否正在运行docker守护程序.除了运行这样的代码之外,有没有更好的方法来检查docker守护程序是否在我的服务器中运行?

ps -ef | grep docker
root      1250     1  0 13:28 ?        00:00:04 /usr/bin/dockerd --selinux-enabled
root      1598  1250  0 13:28 ?        00:00:00 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim docker-containerd-shim --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --runtime docker-runc
root     10997 10916  0 19:47 pts/0    00:00:00 grep --color=auto docker
Run Code Online (Sandbox Code Playgroud)

我想创建一个bash shell脚本来检查我的docker守护进程是否正在运行.如果它正在运行,那么什么也不做,但如果不是,则启动docker守护程序.

我的伪代码是这样的.我正在考虑解析我的ps -ef的输出,但我只是想知道是否有更有效的方法来做我的伪代码.

if(docker没有运行)

          run docker
Run Code Online (Sandbox Code Playgroud)

结束

PS我不是linux专家,我只需要在我自己的环境中做这个实用程序.

Gon*_*ora 23

if curl -s --unix-socket /var/run/docker.sock http/_ping 2>&1 >/dev/null
then
  echo "Running"
else
  echo "Not running"
fi
Run Code Online (Sandbox Code Playgroud)

参考:Docker api v1.28


mor*_*eus 19

这在 Ubuntu 上对我有用

$ systemctl status docker
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


小智 11

我编写了一个小脚本(Mac Osx),通过检查的退出代码来确保Docker正在运行docker stats

#!/bin/bash
#Open Docker, only if is not running
if (! docker stats --no-stream ); then
  # On Mac OS this would be the terminal command to launch Docker
  open /Applications/Docker.app
 #Wait until Docker daemon is running and has completed initialisation
while (! docker stats --no-stream ); do
  # Docker takes a few seconds to initialize
  echo "Waiting for Docker to launch..."
  sleep 1
done
fi

#Start the Container..
Run Code Online (Sandbox Code Playgroud)

  • 好的!我们可以使用 `(! docker stats --no-stream &> /dev/null)` 在等待时使错误消息静音。 (6认同)
  • 这太棒了 (2认同)

anu*_*ava 10

pgrep几乎所有的Linux系统都有一个实用工具.

你可以这样做:

pgrep -f docker > /dev/null || echo "starting docker"
Run Code Online (Sandbox Code Playgroud)

echodocker starting命令替换该命令.

  • 我知道这个问题没有要求这个,但在 mac 上 pgrep 总是找到一个进程,因为当 docker 没有运行时 `com.docker.vmne` 仍然存在 (7认同)
  • 对于@ScottAnderson 的观点,如果 MacOS 上的“Docker Desktop”未运行,“pgrep -f docker”将返回一个具有低(例如 3 位)pid 的单个值。当 MacOS 上的“Docker Desktop”运行时,相同的命令将返回更高(5 位)pid 的列表。因此,对于 MacOS 特定的用例,我认为 `pgrep -f Docker.app` 就是您想要的。 (2认同)

Jan*_*nen 8

您可以简单地:

docker version > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

该命令的退出代码将被存储,$?以便您可以检查它是否为0,然后 docker 正在运行。

docker versionexit 1如果守护进程没有运行,则会。如果遇到其他问题,例如根本没有安装 docker,退出代码将会有所不同。

但最终,如果安装了 docker 并且守护进程正在运行,退出代码将为 0。

无论执行结果如何,都会2>&1重定向stderrstdout> /dev/null会重定向stdout到实际上静默输出。/dev/null

  • 好的!简短而甜蜜。我喜欢在脚本中进行快速失败的健全性检查: if ! docker 版本 > /dev/null 2>&1; 然后 echo“Docker 没有运行。”;1号出口;菲 (2认同)

Vin*_*ent 6

The following works on macOS and on Windows if git bash is installed. On macOS open /Applications/Docker.app would start the docker deamon. Haven't seen anything similar for Windows however.

## check docker is running at all
## based on /sf/ask/1540655511/
{
  ## will throw an error if the docker daemon is not running and jump
  ## to the next code chunk     
  docker ps -q
} || {
  echo "Docker is not running. Please start docker on your computer"
  echo "When docker has finished starting up press [ENTER} to continue"
  read
}
Run Code Online (Sandbox Code Playgroud)


Ram*_*pal 5

您也可以只检查/var/run/docker.pid.

  • 即使 docker 没有运行,这个符号链接似乎也存在:/ (2认同)