TL / DR: можно ли использовать Docker на Windows, с Linux контейнерами и с включенным TLS?
Наблюдение 1 :
Когда я использую Docker на Windows 10 (Docker Desktop 2.2.0.3 и движок 19.03.5), я могу с радостью использовать Linux контейнеры.
Наблюдение 2 :
Используя ту же среду, что и наблюдение 1 выше, если я хочу представить демон docker в TCP с TLS, я могу использовать настройки openssl
до CA и все сертификаты, которые мне нужны - опять же, нет проблем. Просто чтобы уточнить, все это происходит на локальном хосте - задействован только один хост P C.
My Docker Файл конфигурации движка (Docker Рабочий стол> Настройки> Docker Engine) выглядит так:
{
"registry-mirrors": [],
"insecure-registries": [],
"debug": true,
"experimental": false,
"tlsverify": true,
"tlscacert": "C:/dockercerts/ca.pem",
"tlscert": "C:/dockercerts/server-cert.pem",
"tlskey": "C:/dockercerts/server-key.pem",
"hosts": [
"tcp://0.0.0.0:2376",
"npipe://"
]
}
И работает следующая команда docker version
как очарование для меня:
docker --tlsverify ^
--tlscacert=C:/dockercerts/ca.pem ^
--tlscert=C:/dockercerts/cert.pem ^
--tlskey=C:/dockercerts/key.pem ^
-H=localhost:2376 version
Наблюдение 3 :
Но чтобы команда docker version
в наблюдении 2 работала, я должен переключить Docker Рабочий стол от "Linux Контейнеры" до "Windows Контейнеры".
(я не использую для Windows контейнеров.)
Если я пытаюсь переключить Docker Desktop для использования Linux контейнеров, то Docker Desktop падает при запуске (или при перезагрузке). Мне даже пришлось переустановить все это пару раз - я не смог добраться до кнопки «Сброс к заводским настройкам».
Фон :
I пытался использовать Docker API (службы REST) поверх HTTPS, а не HTTP - так вот что все это вызвало - на случай, если это поможет.
Вероятное заключение ...? :
Невозможно смешать эти указанные c вещи на Windows - и я должен использовать хост Linux для своих Linux контейнеров.
Однако я я был бы рад видеть установку, в которой я могу выполнить эту команду docker version
на Windows, используя мои сертификаты и Linux контейнеры - все одновременно.
Если это не удастся, если кто-нибудь поймет, , почему это невозможно (" бла-бла windows труба-бла ... ") или что-то подобное, мне было бы очень интересно .
(Я вижу довольно большое количество вопросов Docker и TLS по SO - но ничего не указывает c для этого сценария.)
ОБНОВЛЕНИЕ :
Вот конкретная ошибка c, которую я получаю:
Docker.Core.Backend.BackendException:
Failed to start
at Docker.Core.Pipe.NamedPipeClient.<TrySendAsync>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Docker.Core.Pipe.NamedPipeClient.Send(String action, Object[] parameters)
at Docker.Actions.<RestartDaemon>b__37_0()
at Docker.ApiServices.TaskQueuing.TaskQueue.<>c__DisplayClass18_0.<.ctor>b__1()
Docker.Core.DockerException:
Failed to start
at Docker.Backend.ContainerEngine.Linux.DoStart(Settings settings, String daemonOptions, Credential credential)
at Docker.Backend.ContainerEngine.Linux.Restart(Settings settings, String daemonOptions, Credential credential)
at Docker.Backend.BackendNamedPipeServer.<Run>b__8_3(Object[] args)
at Docker.Core.Pipe.NamedPipeServer.<>c__DisplayClass9_0.<Register>b__0(Object[] parameters)
at Docker.Core.Pipe.NamedPipeServer.RunAction(String action, Object[] parameters)
Исследование следующего ...
Failed to start at Docker.Core.Pipe.NamedPipeClient.<TrySendAsync>d__5.MoveNext()
.. ... не привело ни к каким выводам, кроме некоторых меня тоже комментариев - в основном связанных с обновлениями версии.