簡體   English   中英

如果將主機添加到守護程序,Windows Docker 守護程序將崩潰。json

[英]Windows Docker deamon crashes if hosts is added to the daemon.json

這是我第一次使用 docker。 請注意,我在帶有 WSL 2 的 windows 上使用 Docker 桌面。

我正在使用需要連接到 docker 守護程序以啟動新容器的遺留軟件。 該軟件的設置說明說我需要設置DOCKER_OPTS='-H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock' 截至目前,我還沒有找到在 windows 中設置 DOCKER_OPTS 的方法,但是將其添加到主機應該可以。

我遇到的問題是當我嘗試將主機添加到C:\Users\<User>\.docker\daemon.json文件(或通過 ui)Z05B6053C41A2130AFD6FC3B158BDA 我在主機 object 中添加什么並不重要,只是主機 object 會導致 docker 在啟動時崩潰。

據我了解,這似乎是一個已知問題,但是我能找到的所有解決方案似乎都沒有答案,或者針對 Linux 而不是 windows。

我曾嘗試使用 -H 命令,但該命令看起來沒有任何變化。

如何將主機添加到 daemon.json 文件而不導致 docker 崩潰,或者至少設置 DOCKER_OPTS 值?

我在:Docker 版本 19.03.8,構建 afacb8b Windows 構建 19041.329 WSL 2

這些我都看過了。

DOCKER_OPTS 在配置文件 /etc/default/docker 中不起作用

在 daemon.json 中配置主機后無法啟動 docker

Enable Remote Docker API on Windows Host - Adding daemon.json breaks docker

在守護進程中為 Windows 更改“主機”/“-h”Docker。json

docker 堆棧跟蹤:

Docker.Core.DockerException:
Failed to start
   at Docker.LinuxkitDaemonStartup.<StartAsync>d__5.MoveNext() in C:\workspaces\stable-2.3.x\src\github.com\docker\pinata\win\src\Docker.Desktop\LinuxkitDaemonStartup.cs:line 59
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Docker.Engines.WSL2.LinuxWSL2Engine.<DoStartAsync>d__23.MoveNext() in C:\workspaces\stable-2.3.x\src\github.com\docker\pinata\win\src\Docker.Desktop\Engines\WSL2\LinuxWSL2Engine.cs:line 149
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Docker.ApiServices.StateMachines.TaskExtensions.<WrapAsyncInCancellationException>d__0.MoveNext() in C:\workspaces\stable-2.3.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\TaskExtensions.cs:line 29
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__5.MoveNext() in C:\workspaces\stable-2.3.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\StartTransition.cs:line 67
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__5.MoveNext() in C:\workspaces\stable-2.3.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\StartTransition.cs:line 92
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Docker.ApiServices.StateMachines.EngineStateMachine.<StartAsync>d__14.MoveNext() in C:\workspaces\stable-2.3.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\EngineStateMachine.cs:line 72
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Docker.Engines.Engines.<RestartAsync>d__29.MoveNext() in C:\workspaces\stable-2.3.x\src\github.com\docker\pinata\win\src\Docker.Desktop\Engines\Engines.cs:line 274

編輯:看起來 docker 的默認行為是在啟動時將主機標志設置為默認值。 如果您在配置文件中設置主機 object,Docker 將崩潰,因為在您嘗試設置已經存在的內容時會發生 object 沖突。 我不知道為什么 docker 這樣做但是是的,docker 按預期工作,根本不工作。

我使用的解決方案是linux,是的,沒錯,不要使用windows,因為沒有辦法設置主機object。 在 linux 中,您可以在啟動時清除啟動配置,然后毫無問題地設置主機 object。

我也遇到了這個問題。 我目前的解決方法是轉發到 docker 之外的端口。 我在管理員命令提示符下運行此命令:

netsh interface portproxy add v4tov4 listenport=2375 listenaddress=192.168.1.20 connectport=2375 connectaddress=127.0.0.1

它甚至在重新啟動后仍然存在,您可以通過以下方式檢查:

netsh interface portproxy show all

雖然這並不能解決 docker 在編輯主機文件時崩潰的問題,但它允許您將守護程序主機代理到不同的端口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM