コマンドラインでdockerを再起動して、batスクリプトを作成して再起動し、いくつかのコンテナを起動できるようにする方法を見つけようとしています。
管理者アクセスを使用してDOSプロンプトを作成し、次を実行します
PS C:\Windows\system32> net stop com.docker.service
The Docker for Windows Service service is stopping.
A system error has occurred.
System error 1067 has occurred.
The process terminated unexpectedly.
The Docker for Windows Service service was stopped successfully.
PS C:\Windows\system32> net start com.docker.service
The Docker for Windows Service service is starting.
The Docker for Windows Service service was started successfully.
PS C:\Windows\system32> docker ps
error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.25/containers/json: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error ma
y also indicate that the docker daemon is not running.
PS C:\Windows\system32>
注:Docker Windowsアプリを使用して正常に再起動できます。ただし、このコマンドラインを実行する必要があります。
なぜドッカーを再起動するのか疑問に思う人のための背景 10回シャットダウンして電源を入れた後、Dockerはコンテナを起動しません。 。再起動するたびにこれを行うのはうんざりですので、すぐに起動できるバットファイルを作成したいと思っていました。
これは、Windowsデスクトップ用Dockerの最新バージョン(Docker Community Edition 2.0.0.3 2019-02-15)
net stop docker
net stop com.docker.service
taskkill /IM "dockerd.exe" /F
taskkill /IM "Docker for Windows.exe" /F
net start docker
net start com.docker.service
"c:\program files\docker\docker\Docker for Windows.exe"
PowershellをWindowsコマンドラインとして使用できる場合は、より制御された正しい結果を取得できます(@sabujpの回答に基づく)。これもDocker Desktop 2.1.0.1(2019-08-19現在)を使用しています。
Write-Output "$((Get-Date).ToString("HH:mm:ss")) - Restarting docker"
foreach($svc in (Get-Service | Where-Object {$_.name -ilike "*docker*" -and $_.Status -ieq "Running"}))
{
$svc | Stop-Service -ErrorAction Continue -Confirm:$false -Force
$svc.WaitForStatus('Stopped','00:00:20')
}
Get-Process | Where-Object {$_.Name -ilike "*docker*"} | Stop-Process -ErrorAction Continue -Confirm:$false -Force
foreach($svc in (Get-Service | Where-Object {$_.name -ilike "*docker*" -and $_.Status -ieq "Stopped"} ))
{
$svc | Start-Service
$svc.WaitForStatus('Running','00:00:20')
}
Write-Output "$((Get-Date).ToString("HH:mm:ss")) - Starting Docker Desktop"
& "C:\Program Files\Docker\Docker\Docker Desktop.exe"
$startTimeout = [DateTime]::Now.AddSeconds(90)
$timeoutHit = $true
while ((Get-Date) -le $startTimeout)
{
Start-Sleep -Seconds 10
$ErrorActionPreference = 'Continue'
try
{
$info = (docker info)
Write-Verbose "$((Get-Date).ToString("HH:mm:ss")) - `tDocker info executed. Is Error?: $($info -ilike "*error*"). Result was: $info"
if ($info -ilike "*error*")
{
Write-Verbose "$((Get-Date).ToString("HH:mm:ss")) - `tDocker info had an error. throwing..."
throw "Error running info command $info"
}
$timeoutHit = $false
break
}
catch
{
if (($_ -ilike "*error during connect*") -or ($_ -ilike "*errors pretty printing info*") -or ($_ -ilike "*Error running info command*"))
{
Write-Output "$((Get-Date).ToString("HH:mm:ss")) -`t Docker Desktop startup not yet completed, waiting and checking again"
}
else
{
Write-Output "Unexpected Error: `n $_"
return
}
}
$ErrorActionPreference = 'Stop'
}
if ($timeoutHit -eq $true)
{
throw "Timeout hit waiting for docker to startup"
}
Write-Output "$((Get-Date).ToString("HH:mm:ss")) - Docker restarted"
「 fast startup 」を無効にしたため、YMMVではなくこの問題は発生しなくなりました。