如何检查 docker daemon 是不是正在运行?
Posted
技术标签:
【中文标题】如何检查 docker daemon 是不是正在运行?【英文标题】:How to check if docker daemon is running?如何检查 docker daemon 是否正在运行? 【发布时间】:2017-10-14 04:47:57 【问题描述】:我正在尝试创建一个 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 的输出,但我只是想知道是否有更有效的方法来处理我的伪代码。
如果(docker 没有运行)
run docker
结束
附: 我不是 linux 专家,我只需要在自己的环境中执行此实用程序。
【问题讨论】:
【参考方案1】:我编写了一个小脚本 (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..
【讨论】:
这太棒了 不错!我们可以使用(! docker stats --no-stream &> /dev/null)
在等待时将错误消息静音。【参考方案2】:
这适用于我在 Ubuntu 上
$ systemctl status docker
【讨论】:
【参考方案3】:在几乎所有 Linux 系统上都有一个名为 pgrep
的实用程序。
你可以这样做:
pgrep -f docker > /dev/null || echo "starting docker"
用您的 docker 启动命令替换 echo
命令。
【讨论】:
我知道这个问题并不要求这个,但在 mac pgrep 总是找到一个进程,因为当 docker 没有运行时com.docker.vmne
仍然存在
对于@ScottAnderson 的观点,如果 MacOS 上的“Docker Desktop”没有运行,pgrep -f docker
将返回一个具有低(例如 3 位)pid 的值。在 MacOS 上运行“Docker Desktop”时,相同的命令将返回更高(5 位)pid 的列表。因此,对于特定于 MacOS 的用例,我认为 pgrep -f Docker.app
是您想要的。【参考方案4】:
如果安装了 git bash,以下内容适用于 macOS 和 Windows。在 macOS 上,open /Applications/Docker.app
将启动 docker 守护进程。但是在 Windows 上还没有看到类似的东西。
## check docker is running at all
## based on https://***.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
【讨论】:
天啊,我也发现了你对这个要点的评论!我真的很喜欢这个解决方案! gist.github.com/peterver/…【参考方案5】:您也可以只检查/var/run/docker.pid
的存在。
【讨论】:
我认为这应该是 macOS 的/var/run/docker.sock
。
即使 docker 没有运行,这个符号链接似乎也存在:/【参考方案6】:
你可以简单地:
docker version > /dev/null 2>&1
该命令的退出代码将存储到$?
,因此您可以检查它是否为0
,然后docker正在运行。
docker version
将 exit 1
如果守护程序没有运行。如果遇到其他问题,比如 docker 根本没有安装,退出代码会有所不同。
但归根结底,如果安装了 docker 并且守护程序正在运行,则退出代码将为 0。
2>&1
将stderr
重定向到stdout
和> /dev/null
将stdout
重定向到/dev/null
实际上使输出静音,无论执行结果如何。
【讨论】:
【参考方案7】:if curl -s --unix-socket /var/run/docker.sock http/_ping 2>&1 >/dev/null
then
echo "Running"
else
echo "Not running"
fi
参考:Docker api v1.28
【讨论】:
【参考方案8】:一个函数可能是这样的:
isRunning
`ps -ef | grep "[d]ocker" | awk 'print $2'`
我创建了一个脚本来启动、停止、重启一个 mongodb-server。 您只需要更改脚本中的一些路径,我也为您工作: Script
【讨论】:
ps -C docker -opid=
【参考方案9】:
我确定你想启动 docker 守护进程,所以这里是在执行 Docker 运行语句之前启动它的代码:
sudo systemctl start docker
【讨论】:
以上是关于如何检查 docker daemon 是不是正在运行?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查 docker 引擎和 docker 容器是不是正在运行?
无法连接到 unix:///var/run/docker.sock 上的 Docker 守护程序。 docker 守护进程是不是正在运行?带有自托管运行器的 Gitlab Cloud CI/CD 错误
Error response from daemon ... no space left on device docker启动容器服务报错
Ansible自动化运维实战在docker环境部署ansible管理平台awx
Docker pull拉取镜像报错“Error response from daemon: Get “https://registry-1.docker.io/v2”解决办法