如何检查docker是否正在运行

时间:2017-05-01 15:19:51

标签: bash docker

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

18 个答案:

答案 0 :(得分:40)

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

docker inspect -f '{{.State.Running}}' $container_name

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

systemctl show --property ActiveState docker

您还可以使用docker infodocker version连接到泊坞窗,如果守护程序不可用,它们将会出错。

答案 1 :(得分:10)

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

if docker ps | grep -q keyword
then 
    echo "Running!"
else
    echo "Not running!"
    exit 1
fi

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

答案 2 :(得分:9)

您可以使用:systemctl is-active docker

查看泊坞广告状态
➜  ~  systemctl is-active docker
active

您可以将其用作:

➜  ~  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 *

答案 3 :(得分:6)

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

检查列"状态"

答案 4 :(得分:6)

我最终使用了

Downloading binary from https://github.com/sass/node- 
sass/releases/download/v4.11.0/win32-x64-64_binding.node
Cannot download "https://github.com/sass/node- 
sass/releases/download/v4.11.0/win32-x64-64_binding.node":

tunneling socket could not be established, cause=socket hang up

Hint: If github.com is not accessible in your location
  try setting a proxy via HTTP_PROXY, e.g.

  export HTTP_PROXY=http://example.com:1234

  or configure npm proxy via

  npm config set proxy http://example.com:8080

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

答案 5 :(得分:5)

对于第一个问题的答案,请参阅此答案 - https://stackoverflow.com/a/65447848/4691279

对于您的第二个问题 - 您可以使用 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
    
  • 如果 Docker 未运行,您将收到一条错误消息,指出 docker 守护程序未运行。

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

答案 6 :(得分:4)

容器状态:真/假

# docker inspect --format '{{json .State.Running}}' container-name
true
#

答案 7 :(得分:3)

任何泊坞窗命令(docker -v除外),例如docker ps 如果Docker正在运行,您将获得一些有效的响应,否则您将收到包含&#34;您的docker守护程序是否正常运行的消息?&#34;

您还可以检查您的任务管理器。

答案 8 :(得分:2)

您可以使用此命令systemctl status docker进行检查,它将显示泊坞窗的状态。如果要开始使用,可以使用systemctl start docker代替systemctl,也可以分别使用serviceservice docker statusservice docker start

答案 9 :(得分:2)

对于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

答案 10 :(得分:2)

在终端中运行以下命令:

docker ps

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

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

答案 11 :(得分:2)

docker ps -a

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

答案 12 :(得分:1)

我有一个在 Gitea 容器上下文中使用上述一些工作的更充实的示例,但它可以根据名称轻松转换为另一个容器。此外,您可能可以使用 docker ps --filter 功能在较新的系统或没有使用 docker-compose 的系统中设置 $GITEA_CONTAINER。

# Set to name or ID of the container to be watched.
GITEA_CONTAINER=$(./bin/docker-compose ps |grep git|cut -f1 -d' ')

# Set timeout to the number of seconds you are willing to wait.
timeout=500; counter=0
# This first echo is important for keeping the output clean and not overwriting the previous line of output.
echo "Waiting for $GITEA_CONTAINER to be ready (${counter}/${timeout})"
#This says that until docker inspect reports the container is in a running state, keep looping.
until [[ $(docker inspect --format '{{json .State.Running}}' $GITEA_CONTAINER) == true ]]; do

  # If we've reached the timeout period, report that and exit to prevent running an infinite loop.
  if [[ $timeout -lt $counter ]]; then
    echo "ERROR: Timed out waiting for $GITEA_CONTAINER to come up."
    exit 1
  fi

  # Every 5 seconds update the status
  if (( $counter % 5 == 0 )); then
    echo -e "\e[1A\e[KWaiting for $GITEA_CONTAINER to be ready (${counter}/${timeout})"
  fi

  # Wait a second and increment the counter
  sleep 1s
  ((counter++))

done

答案 13 :(得分:1)

运行:

docker version

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

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

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

如果docker 未运行,您将看到:

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

Error response from daemon: Bad response from Docker engine

答案 14 :(得分:1)

在Mac上

您可能会看到图像

enter image description here

如果您右键单击泊坞窗图标,则会看到

enter image description here

或者:

$ docker ps

和 $ docker run hello-world

答案 15 :(得分:0)

我如何签入SSH。运行:

systemctl

如果响应:无法建立D-Bus连接:不允许操作

它是docker或WSL容器。

答案 16 :(得分:0)

如果基本目标是“如何在Docker启动时启动容器?”

我们可以使用Docker的restart policy

要将重新启动策略添加到现有容器,请执行以下操作:

Docker: Add a restart policy to a container that was already created

示例:

fs.readFile('./calc.html', function(error, data){
   if(error){
       //do nothing for now              
   } else if (data){
       resp.writeHead(200, {'Content-Type':'text/html'});
       var sum = 9;
       resp.write(sum);
       resp.end(data);
   }
});        

答案 17 :(得分:0)

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

docker inspect postgres | grep "Running"

此命令将检查例如我的postgres容器是否正在运行,并以“ Running”:true

的形式返回输出

希望这会有所帮助。