Docker Рабочий стол для Windows с Linux Контейнеры и TLS - PullRequest
3 голосов
/ 13 февраля 2020

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()

.. ... не привело ни к каким выводам, кроме некоторых меня тоже комментариев - в основном связанных с обновлениями версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...