Вход в Docker всегда использует HTTP вместо HTTPS - PullRequest
0 голосов
/ 04 декабря 2018

Я установил сервер реестра Docker в виртуальной машине.На сервере есть ssl-сертификат, подписанный центром сертификации, который находится в доверенных корневых сертификатах Windows.

Для доступа к реестру я создал ssh-туннель, перенаправляющий мой локальный порт 5000 на виртуальный целевой сервер [localhost: 5000].Если я открою https://localhost:5000 на моей машине с помощью браузера, все будет хорошо.Сертификат считается действительным.

В оболочке на виртуальной машине, вход в Docker работает отлично.Он запрашивает мои учетные данные и хранит их.Я могу загружать изображения в реестр, как и ожидалось.

Всякий раз, когда я пытаюсь войти в систему со своего компьютера разработчика, подключенного через туннель, мой локальный докер, кажется, игнорирует что-либо SSL:

C:\WINDOWS\system32>docker login https://localhost:5000
Username: ******
Password: ******
Error response from daemon: Get http://localhost:5000/v2/: dial tcp 127.0.0.1:5000: connect: connection refused

похоже, что для входа в Docker используется протокол HTTPS, а не HTTPS.Я не могу понять, как заставить вход в Docker использовать SSL.

  • Я дважды проверил свою локальную конфигурацию docker-daemon, чтобы убедиться, что у меня нигде не определены «Небезопасные реестры».
  • Я удалил свои сохраненные учетные данные в своем профиле, чтобы убедиться, что ничего странного там не происходит.

Любые предложения будут очень приветствоваться!

Приветствия

Corelgott

1 Ответ

0 голосов
/ 05 декабря 2018

Хорошо, я понял это.

[tl; dr] В Windows docker login localhost ссылается на moby-vm, на котором работает демон, а не на Windows-систему .

Поскольку мы вынуждены использовать Windows 10 в качестве ОС, docker использует свой moby-vm через hyper-v / virtualbox / hypervisor для запуска «локального» демона docker.Поэтому, когда я набираю docker login localhost:5000 в своей оболочке Windows, команда запускается не моей машиной, а демоном, который находится в виртуальной машине.В этом контексте «localhost» относится не к моей dev-системе, а к виртуальной машине, в которой работает демон.

Чтобы решить эту проблему, мне пришлось:

  1. изменить мойssh-tunnel для «принятия соединения от других хостов» (для этого у putty есть флажок)
  2. call docker login hostname:5000 (где hostname - имя моей машины разработки, которую виртуальный компьютер может разрешить и получить к ней доступ.Вы можете использовать команду hostname в командной строке, чтобы найти ее.)

Теперь SSL, auth, push и pull работают должным образом.Довольно странное поведение ошибки, но это имеет смысл, так как нет сервера реестра, работающего с Docker-Daemon-VM.

Надеюсь, этот пост спасет кого-то еще.

Приветствия,

Corelgott

...