Я впервые работаю с докером. Обратите внимание, что я использую 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 без проблем.