Демон Windows Docker аварийно завершает работу, если хосты добавляются в daemon.json

Я впервые работаю с докером. Обратите внимание, что я использую Docker Desktop в Windows с WSL 2.

Я работаю с большим количеством устаревшего программного обеспечения, которому необходимо подключиться к демону докеров для запуска новых контейнеров. В инструкции по установке этого программного обеспечения сказано, что мне нужно установить DOCKER_OPTS='-H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock'. На данный момент я не нашел способа установить DOCKER_OPTS в Windows, но добавление его к хостам должно работать.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь добавить хосты в файл C:\Users\<User>\.docker\daemon.json (или через пользовательский интерфейс), докер не запускается. Неважно, что я добавляю в объект hosts, просто объект hosts вызывает сбой Docker при запуске.

Насколько я понимаю, похоже, что это известная проблема, однако все решения, которые я могу найти, кажутся без ответа или для Linux, а не для Windows.

Я пробовал использовать команду -H, похоже, что ничего не меняется с командой.

Как я могу добавить хосты в файл daemon.json без сбоя докера или, по крайней мере, установить значение DOCKER_OPTS?

Я использую: Docker версии 19.03.8, сборка afacb8b Windows Build 19041.329 WSL 2

Я просмотрел эти.

DOCKER_OPTS не работают в файле конфигурации /etc/ по умолчанию/докер

Не удалось запустить докер после настройки хостов в daemon.json< /а>

Включить Remote Docker API на хосте Windows — Добавление daemon.json ломает докер

Изменить hosts/-h Docker для Windows в daemon.json

трассировка стека докера:

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 выйдет из строя, если вы установите объект hosts в файле конфигурации, потому что у него будет конфликт объектов, когда вы пытаетесь установить что-то, что уже существует. Я понятия не имею, почему докер сделал это таким образом, но да, докер работает как задумано, а не работает вообще.

Решение, которое я использовал, было linux, да, верно, не используйте окна, так как нет возможности установить объект hosts. В Linux вы можете очистить конфигурацию запуска при запуске, а затем установить объект hosts без проблем.


person Spik330    schedule 17.06.2020    source источник


Ответы (1)


Я также испытываю эту проблему. Мой текущий обходной путь - перенаправить на порт за пределами докера. Я запускаю эту команду в командной строке администратора:

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 при редактировании файла хоста, это позволит вам проксировать хост демона на другой порт.

person user3704512    schedule 30.07.2020
comment
Это было единственное, что сработало для меня. Однако мне пришлось добавить правило брандмауэра, чтобы иметь возможность подключаться с других компьютеров. См. здесь: davidhamann.de/2019/06/20/setting- up-portproxy-netsh - person rolve; 27.02.2021