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

时间:2017-05-15 11:53:12

标签: 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

我想创建一个bash shell脚本来检查我的docker守护程序是否正在运行。如果它正在运行,则不执行任何操作,但如果不运行则启动docker守护程序。

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

  

if(docker未运行)

          run docker
     

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

7 个答案:

答案 0 :(得分:8)

这对我在Ubuntu上有效

$ systemctl status docker

enter image description here

答案 1 :(得分:7)

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

#!/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..

答案 2 :(得分:6)

在几乎所有Linux系统上都有一个名为pgrep的实用程序。

你可以这样做:

pgrep -f docker > /dev/null || echo "starting docker"

用docker启动命令替换echo命令。

答案 3 :(得分:2)

您也可以检查是否存在/var/run/docker.pid

答案 4 :(得分:1)

如果安装了git bash,以下内容将在macOS和Windows上运行。在macOS open /Applications/Docker.app上将启动docker deamon。但是,对于Windows,还没有看到任何类似的东西。

## check docker is running at all
## based on https://stackoverflow.com/questions/22009364/is-there-a-try-catch-command-in-bash
{
  ## 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
}

答案 5 :(得分:0)

一个函数看起来如此:

isRunning {
    `ps -ef | grep "[d]ocker" | awk {'print $2'}`
}

我创建了一个脚本来启动,停止,重启mongodb-server。 你只需要更改脚本中的一些路径,我也适合你: Script

答案 6 :(得分:0)

我确定您要启动docker守护进程,因此这是在执行Docker run语句之前启动它的代码:

sudo systemctl start docker