【问题标题】:How to check if Docker is running on Windows?如何检查 Docker 是否在 Windows 上运行?
【发布时间】:2019-11-28 04:46:11
【问题描述】:

我想知道如何通过命令行(cmd 或 powershell)检查 Docker 是否在 Windows 上运行。

虽然,我发现了几篇表明解决方案的帖子,但它们适用于 Linux 环境:

How to check if docker is running or not

How to check if docker daemon is running?

我无法得到 Windows 系统的答案。

【问题讨论】:

    标签: windows powershell docker cmd


    【解决方案1】:

    尝试在 Powershell 或 cmd 上运行以下任一命令,如果安装了 docker,您应该会得到无错误响应:

    docker --version

    docker-compose --version

    docker ps

    【讨论】:

    • 我会推荐 docker psdocker info 用于跨平台使用。不幸的是,docker --version 在 macOS 等其他平台上成功完成,即使 Docker 没有运行。
    • "docker ps"(检查 docker 是否存在并且正在运行)优于 "docker --version"(仅检查是否安装了 docker)。 “docker ps”检查适用于 Mac、Windows 和 Ubuntu(可能适用于所有 Linux 版本,但我使用的是 Ubuntu,所以我将报告这一点)
    【解决方案2】:

    提供两种方法:

    1. docker version

      此方法对cmdpowershell都有效,但如果是cmd,则需要使用echo %errorlevel%查看结果。

      如果docker daemon 正在运行,它将如下所示:

      PS C:\> docker version
      Client: Docker Engine - Community
      Version:           18.09.2
      API version:       1.39
      Go version:        go1.10.8
      Git commit:        6247962
      Built:             Sun Feb 10 04:12:31 2019
      OS/Arch:           windows/amd64
      Experimental:      false
      
      Server: Docker Engine - Community
       Engine:
        Version:          18.09.2
        API version:      1.39 (minimum version 1.12)
        Go version:       go1.10.6
        Git commit:       6247962
        Built:            Sun Feb 10 04:13:06 2019
        OS/Arch:          linux/amd64
        Experimental:     false
      PS C:\> echo $?
      True
      

      如果docker daemon没有运行,它将是下一个:

      PS C:\> docker version
      Client: Docker Engine - Community
      Version:           18.09.2
      API version:       1.39
      Go version:        go1.10.8
      Git commit:        6247962
      Built:             Sun Feb 10 04:12:31 2019
      OS/Arch:           windows/amd64
      Experimental:      false
      Error response from daemon: An invalid argument was supplied.
      PS C:\> echo $?
      False
      
    2. Get-Process:

      此方法仅适用于powershell

      如果docker daemon 正在运行,它将是下一个:

      PS C:\> Get-Process 'com.docker.proxy'
      Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
      -------  ------    -----      -----     ------     --  -- -----------
          205      10    11416      18860       0.13  12620   2 com.docker.proxy
      PS C:\> echo $?
      True
      

      如果docker daemon 没有运行,它将是下一个:

      PS C:\> Get-Process 'com.docker.proxy'
      Get-Process : Cannot find a process with the name "com.docker.proxy". Verify the process name and call the cmdlet
      again.
      At line:1 char:1
      + Get-Process 'com.docker.proxy'
      + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          + CategoryInfo          : ObjectNotFound: (com.docker.proxy:String) [Get-Process], ProcessCommandException
          + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand
      
      PS C:\> echo $?
      False
      

    【讨论】:

    • 提示:docker --version 将只显示版本。但是docker version(没有破折号)会显示更多细节。
    【解决方案3】:

    码头信息

    • 检查 Docker 是否正在运行的独立于操作系统的方法是使用 docker info 命令询问 Docker。此选项适用于 Windows 和 Linux 发行版。
    • 如果Docker正在运行时你会得到如下所示的结果,否则你会得到一个错误信息:
    C:\Users\himanshu.agrawal>docker info
    Client:
     Debug Mode: false
     Plugins:
      scan: Docker Scan (Docker Inc., v0.3.4)
    
    Server:
     Containers: 1
      Running: 0
      Paused: 0
      Stopped: 1
     Images: 2
     Server Version: 19.03.13
     Storage Driver: overlay2
      Backing Filesystem: extfs
      Supports d_type: true
      Native Overlay Diff: true
     Logging Driver: json-file
     Cgroup Driver: cgroupfs
     Plugins:
      Volume: local
      Network: bridge host ipvlan macvlan null overlay
      Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
     Swarm: inactive
     Runtimes: runc
     Default Runtime: runc
     Init Binary: docker-init
     containerd version: 8fba4e9a7d01810a393d5d25a3621dc101981175
     runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
     init version: fec3683
     Security Options:
      seccomp
       Profile: default
     Kernel Version: 5.4.39-linuxkit
     Operating System: Docker Desktop
     OSType: linux
     Architecture: x86_64
     CPUs: 2
     Total Memory: 1.915GiB
     Name: docker-desktop
     ID: HHIB:HQRB:7VBA:LBUY:HKVJ:LFZ3:FSWZ:4ARP:74ZB:TIWO:WTMG:LHZH
     Docker Root Dir: /var/lib/docker
     Debug Mode: false
     Registry: https://index.docker.io/v1/
     Labels:
     Experimental: false
     Insecure Registries:
      127.0.0.0/8
     Live Restore Enabled: false
     Product License: Community Engine
    

    获取进程'com.docker.proxy'

    • 此选项只能与 Windows Power Shell 一起使用(仅 Power Shell,甚至不能与 CMD 一起使用)。如果 Docker 正在运行,您将获得如下输出,否则您将收到错误消息:
    PS C:\Users\himanshu.agrawal> Get-Process 'com.docker.proxy'
    
    Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
    -------  ------    -----      -----     ------     --  -- -----------
        178      15    22984      25172       0.77  14224   1 com.docker.proxy
    

    其他选项 - 特定于 Linux

    • 您还可以使用操作系统实用程序,例如 sudo systemctl is-active dockersudo status dockersudo service docker status,或使用 Windows 实用程序检查服务状态。
    • 最后,您可以查看“dockerd”进程的进程列表, 使用 pstop 之类的命令。

    Source 1

    【讨论】:

    • Get-Process 在它启动之后但在它准备好之前仍然可以工作。如果你想知道 Docker 什么时候准备好,而不仅仅是启动,docker info 只会在 docker 启动并且启动并准备好时返回一个有效的响应。
    【解决方案4】:

    我在编写一些脚本以在 Windows 上使用 Docker 容器时遇到了同样的问题。

    给出的答案对我不适用,因为它们花费了太多时间。我假设 “是 Docker 在 Windows 上运行” 也意味着 default VM 正在运行。因此,我检查了 Docker default 机器 IP 192.168.99.100 的其他答案,它通常在 Docker 开启时应该运行。然后我就 ping 了它:

    ping -n <numberOfPings> -w <waitingTimeInMilliSeconds> 192.168.99.100
    
    #Example:
    ping -n 1 -w 1000 192.168.99.100
    

    我发现当 Docker 运行时,我通常会在不到 1 毫秒的时间内得到响应,这意味着检查速度非常快。这也意味着如果 Docker default 机器没有运行,等待甚至不到 1000 毫秒应该是非常稳健的。

    【讨论】:

    • 有趣的方法!
    【解决方案5】:

    如果在 Windows 上使用 wsl2,您可以使用:

    wsl -l -v
    

    输出将如下所示:

      NAME                   STATE           VERSION
    * Ubuntu                 Stopped         1
      docker-desktop         Running         2
      docker-desktop-data    Running         2
    

    【讨论】: