我正在尝试创建一个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专家,我只需要在我自己的环境中做这个实用程序。
答案 0 :(得分:8)
答案 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