Ошибка при проверке соединения TLS: ошибка при проверке и/или повторном создании сертификатов

После перезапуска окон я не могу подключиться к док-машине, работающей в Oracle Virtual Box. Когда я запускаю Docker QuickStart Terminal, все выглядит нормально, все работает нормально, и выдает мне это сообщение:

docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com

но когда я сделаю:

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL   SWARM   DOCKER   ERRORS
default   -        virtualbox   Timeout

и:

λ docker images
An error occurred trying to connect: Get http://localhost:2375/v1.21/images/json: dial tcp 127.0.0.1:2375: ConnectEx tcp: No connection could be made because the target machine actively refused it.

также, когда я пытаюсь повторно инициализировать свою среду, я получаю:

λ docker-machine env default
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.99.100:2376": dial tcp 192.168.99.100:2376: i/o timeout
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'.
Be advised that this will trigger a Docker daemon restart which will stop running containers.

Кстати, регенерация сертификатов тоже не помогает. Есть идеи?

Спасибо.


person Hazhir    schedule 06.01.2016    source источник
comment
Я получаю эту проблему каждые несколько дней. Мне нужно удалить машину по умолчанию, а затем воссоздать все мои изображения с нуля. Это королевская боль. Поэтому предлагает награду.   -  person rmcsharry    schedule 21.03.2016
comment
Отладка вывода с моей машины, которая может помочь: github. com/rmcsharry/debug-docker-machine/blob/master/   -  person rmcsharry    schedule 21.03.2016


Ответы (15)


Пожалуйста, попробуйте восстановить сертификаты вручную:

docker-machine --debug regenerate-certs -f default

и проверьте наличие ошибок, чтобы исправить их, а затем повторите попытку:

docker-machine --debug env default

Если он не работает по ssh, скопируйте и вставьте эту команду в терминал, чтобы увидеть, в чем проблема, добавив дополнительные -vv.

Если у вас есть:

debug1: подключиться к адресу 127.0.0.1 порт 64368: подключение отклонено

то ваша машина не работает (проверьте docker-machine ls), поэтому попробуйте:

docker-machine start

Затем попробуйте подключиться к нему по ssh через:

docker-machine -D ssh default
person kenorb    schedule 11.03.2016
comment
Спасибо, но это не решает меня. Моя машина запущена, перегенерация сертификатов тоже не помогает. - person rmcsharry; 21.03.2016
comment
@rmcsharry Если машина работает (docker-machine ls), можете ли вы подключиться к ней по ssh через docker-machine -D ssh default? Если не можете, то какая у вас ошибка? - person kenorb; 21.03.2016
comment
Я не мог больше тратить время, поэтому я уничтожил контейнер по умолчанию и создал его заново. В следующий раз, когда это произойдет (вероятно, через 3-4 дня), я попробую это и опубликую здесь. - person rmcsharry; 21.03.2016
comment
docker-machine --debug regenerate-certs -f name_of_your_vm - person aurelius; 07.03.2019

Проведя некоторое исследование, я обнаружил, что следующий обходной путь может решить проблему на данный момент:

  1. Открытый центр управления сетями и общим доступом

  2. Нажмите «Изменить настройки адаптера».

  3. Посмотрите, есть ли у вас какие-либо включенные адаптеры, такие как сетевые адаптеры VPN или VM Ware.

  4. Попробуйте отключить их и попробуйте еще раз подключиться к вашему контейнеру.

  5. Если это не сработало, когда у вас отключены другие адаптеры, перезагрузите компьютер - в моем случае это сработало для меня.

person Hazhir    schedule 07.01.2016
comment
2n раз я попробовал это, это сработало. В следующий раз, когда это произойдет, я попробую еще раз, чтобы увидеть, повторяется ли это. - person rmcsharry; 30.03.2016
comment
Это также сработало для меня после перезагрузки ПК. Когда я отключил адаптеры VirtualBox, новые создаются после перезапуска. - person oskansavli; 24.09.2019

Я исправляю это, делая это:

  • Удалены все интерфейсы только для хоста из моего VirtualBox (VirtualBox → Настройки → Сеть → Сети только для хоста).
  • rmdir.exe --ignore-fail-on-non-empty ~/.docker/
  • docker-machine start
  • docker-machine env
  • eval $("C:\Program Files\Docker Toolbox\docker-machine.exe" env default) (добавлено также в конце моего .bash_profile).
  • docker run hello-world ← сейчас работает

На основе этого поста.

person Pablo Bianchi    schedule 01.09.2016

Что сработало для меня, так это этот ответ из репозитория docker-machine:

docker-machine regenerate-certs --client-certs [name]

По сути, истек срок действия клиентских сертификатов. Сообщение об ошибке, которое я получаю от docker-machine, похоже на ваше (т. Е. Нет указаний на то, что сертификаты клиента необходимо восстановить).

person munsu    schedule 07.09.2020

Вот что сработало для меня. Первые шаги аналогичны тому, что предложил Хажир, затем следует перегенерация сертификатов.

  1. Откройте Центр управления сетями и общим доступом.
  2. Нажмите «Изменить настройки адаптера».
  3. Отключите все активные сетевые адаптеры VMWare. Обычно имеет объяснение «VirtualBox Host-Only Ethernet Adapter».
  4. Подключитесь к своему контейнеру, запустив docker-machine start.
  5. Выполнить docker-machine env. Если вы похожи на меня, вы получите следующую ошибку:

Ошибка при проверке TLS-соединения: ошибка при проверке и/или повторном создании сертификатов: произошла ошибка при проверке сертификатов для хоста «192.168.99.100:2376»: x509: сертификат действителен для 192.168.99.101, а не для 192.168.99.100

И это хорошо. Теперь все, что нам нужно сделать, это запустить

docker-machine regenerate-certs -f default

Затем снова протестируйте его с помощью docker-machine env. Если вы получаете:

SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.99.100:2376
SET DOCKER_CERT_PATH=C:\Users\Jay\.docker\machine\machines\default
SET DOCKER_MACHINE_NAME=default
REM Run this command to configure your shell:
REM     FOR /f "tokens=*" %i IN ('docker-machine env') DO %i

Тогда все готово. В моем случае мне нужно было запустить виртуальную машину, запустив Docker Quickstart Terminal.

person jaycode    schedule 25.03.2016

У меня тоже есть эта проблема. Выполнение docker-machine regenerate-certs <vm-name> не может решить проблему. Я ищу в Google информацию об ошибке и нахожу решение ниже.

  • выполнить sudo ifconfig vboxnet0 up в терминале.
  • показать состояние машины докера: docker-machine ls.
  • теперь STATE и URL в порядке.

Но перезапустите систему, и эта проблема не исчезнет.

Ссылка на ошибки GitHub, которую я нашел, находится здесь.

Кажется, в VirtualBox 5.1.24 есть ошибка.

person invzhi    schedule 27.07.2017

Способ, которым я обеспечиваю возможность подключения к своим док-машинам, заключается в назначении им фиксированного IP-адреса (и повторном создании сертификатов только один раз ) (перезагрузка не требуется)

После этого docker-machine ls всегда работает.

Мой текущий скрипт:
(замените %PRGS%\dm\latest на путь, по которому docker-machine.exe находится на вашем компьютере)
(убедитесь, что PATH включает последний /путь/к/git/usr/bin, чтобы были доступны такие команды, как ssh)

> more dmvbf.bat
@echo off
setlocal enabledelayedexpansion
set machine=%1
if "%machine%" == "" (
        echo dmvbf expects a machine name
        exit /b 1
)
set ipx=%2
if "%ipx%" == "" (
        echo dmvbf x missing ^(for 192.168.x.y^)
        exit /b 2
)
set ipy=%3
if "%ipy%" == "" (
        echo dmvbf y missing ^(for 192.168.x.y^)
        exit /b 3
)

%PRGS%\dm\latest\docker-machine.exe ssh %machine% "sudo sh -c 'echo \"kill \$(more /var/run/udhcpc.eth1.pid)\" | sudo tee /var/lib/boot2docker/bootsync.sh >/dev/null'"
%PRGS%\dm\latest\docker-machine ssh %machine% "sudo sh -c 'echo \"ifconfig eth1 192.168.%ipx%.%ipy% netmask 255.255.255.0 broadcast 192.168.%ipx%.255 up\" | sudo tee -a /var/lib/boot2docker/bootsync.sh >/dev/null'"

%PRGS%\dm\latest\docker-machine ssh %machine% "sudo chmod 755 /var/lib/boot2docker/bootsync.sh"

%PRGS%\dm\latest\docker-machine ssh %machine% "sudo cat /var/run/udhcpc.eth1.pid | xargs sudo kill"

%PRGS%\dm\latest\docker-machine ssh %machine% "sudo ifconfig eth1 192.168.%ipx%.%ipy% netmask 255.255.255.0 broadcast 192.168.%ipx%.255 up"

Например:

dmvbf default 99 100
docker-machine regenerate-certs -f default

Это назначит 192.168.99.100 док-машине 'default' и повторно сгенерирует сертификаты один раз.
Затем каждый раз, когда вызывается docker-machine ls, он будет отображать один и тот же IP-адрес для 'default'.

person VonC    schedule 21.03.2016
comment
Привет, @VonC, я уже использую твой скрипт — я разместил его в ветке, в которую ты изначально его добавил. Но по какой-то причине мой докер-машина по умолчанию все еще уходит в «тайм-аут» каждые несколько дней. Я думаю, что это связано с тем, что хост засыпает или его выключают, но я не уверен. Мне бы очень хотелось, чтобы какой-то способ исправить тайм-аут, когда он происходит, не требует каждый раз перестраивать мои док-контейнеры с нуля. - person rmcsharry; 21.03.2016
comment
@rmcsharry, в этом случае откройте VirtualBox, чтобы проверить состояние виртуальной машины. - person VonC; 21.03.2016
comment
@rmcsharry, другими словами, ваша виртуальная машина находится в необычном состоянии, например, aborted или guru meditation? - person VonC; 21.03.2016
comment
Нет, виртуальная машина в порядке, и я могу запустить/остановить ее из VirtualBox без проблем. - person rmcsharry; 21.03.2016
comment
@rmcsharry, вы можете попробовать еще раз сценарий, который я упоминаю в ответе: он отличается от того, что был опубликован в исходной теме. - person VonC; 22.03.2016
comment
это случилось снова. Я ничего не делал, кроме как выключил виртуальную машину, выключил компьютер. Включите его снова, и он показывает тайм-аут. Я попробовал ваш скрипт (пришлось изменить последние 5 строк, чтобы они указывали на C:\Program Files\Docker Toolbox\docker-machine.exe вместо %PRGS%\dm\latest\docker-machine. К сожалению, проблема все еще сохраняется. - person rmcsharry; 23.03.2016
comment
@rmcsharry Обычно я вижу тайм-аут сразу после выполнения скрипта. Попробуйте docker-machine ssh yourMachine, затем проверьте в других окнах, показывает ли docker-machine ls тайм-аут. - person VonC; 23.03.2016
comment
После того, как я запустил ваш скрипт, он не сработал. Попытался выключить виртуальную машину и перезапустить терминал DQS, но тайм-аут все еще был. Поэтому я вручную удалил хост-адаптер, запустил QuickStart, чтобы позволить ему воссоздать его, так как я понял, что это как-то связано с неправильным хост-адаптером (или сетевыми настройками машины по умолчанию). Во всяком случае, это не помогло. - person rmcsharry; 23.03.2016
comment
Итак, теперь я просто отключил все, чтобы попробовать с чистой загрузки хост-компьютера. Теперь, когда я запустил терминал Docker QuickStart, ему пришлось снова запрашивать разрешение на создание сетевого адаптера хоста и DHCP-сервера. Я думаю, я, должно быть, каким-то образом испортил существующий (когда пытался что-то исправить). Теперь виртуальная машина по умолчанию работает без тайм-аута, без ошибок на правильном IP-адресе. - person rmcsharry; 23.03.2016
comment
@rmcsharry забудьте о быстром старте, он вам не нужен. Достаточно простого создания docker-machine, затем скрипта, а затем docker-machine ssh. - person VonC; 23.03.2016
comment
но я не хочу создавать docker-machine - это воссоздает все с нуля. Мне нужно воссоздать postgres, mysql, мой контейнер для хранения, Redis - все это каждый раз повторно загружается на машину по умолчанию. - person rmcsharry; 23.03.2016
comment
@rmcsharr Я понимаю. Я привык воссоздавать с нуля и позволять Dockerfile тянуть все, что мне нужно ;) - person VonC; 23.03.2016
comment
У меня есть 4 изображения на машине по умолчанию. Каждый раз, когда происходит этот тайм-аут, мне приходится удалять машину по умолчанию и создавать ее заново, а это значит, что я должен воссоздавать эти 4 образа (и переустанавливать свои базы данных из резервных копий). - person rmcsharry; 23.03.2016
comment
@rmcsharry, но после перезагрузки с чистой загрузки и повторного создания сетевого адаптера хоста и DHCP-сервера у вас все еще есть проблема? - person VonC; 23.03.2016
comment
Нет. Но в других случаях с чистой загрузки я вижу тайм-аут. Итак, теперь мне интересно, можно ли решить эту проблему, просто удалив хост-сетевой адаптер в Virtual Box, затем перезагрузив компьютер и повторно запустив быстрый запуск. В следующий раз, когда это произойдет, я попробую это. - person rmcsharry; 23.03.2016
comment
@rmcshary Хорошо. Вы используете последнюю версию Oracle Virtualbox? - person VonC; 23.03.2016
comment
Версия 5.0.14 r105127 - person rmcsharry; 23.03.2016

Попробуйте этот способ/обходной путь:

  • во-первых, убедитесь, что в папке $yourhome/.docker/machine/certs/ есть ca.pem, cert.pem, key.pem, ca-key.pem, для этих потерянных четырех файлов *.pem вы можете скопировать их из других места или, может быть, создать их самостоятельно (эти четыре файла pem наверняка неверны в начале)
  • убедитесь, что env правильно настроен в bash_profile, например:
  • перезапустите cmd: docker-machine regenerate-certs default (возможно, перед запуском этого вам нужно снова открыть терминал docker) Пробовал на панели инструментов docker на Mac, и это работает.
  • Наконец, некоторые журналы результатов: Ошибка проверки соединения TLS: Ошибка проверки и/или регенерации сертификатов: Произошла ошибка при проверке сертификатов для хоста «192.168.99.100:2376»: x509: сертификат, подписанный неизвестным органом. Вы можете попытаться восстановить их используя «докер-машина регенерировать-сертификаты [имя]». Имейте в виду, что это приведет к перезапуску демона Docker, который может остановить запуск контейнеров. ... ... johns-MacBook-Pro:certs johnwang$ docker-machine regenerate-certs default Регенерировать машинные сертификаты TLS? Предупреждение: это необратимо. (y/n): y Регенерация сертификатов TLS Ожидание доступности SSH... Обнаружение поставщика услуг... Копирование сертификатов в каталог локального компьютера... Копирование сертификатов на удаленный компьютер... Настройка конфигурации Docker на удаленном компьютере daemon... johns-MacBook-Pro:certs johnwang$ docker-machine ls ИМЯ АКТИВНЫЙ ДРАЙВЕР СОСТОЯНИЕ URL SWARM DOCKER ERRORS по умолчанию - виртуальный бокс Работает tcp://192.168.99.100:2376 v17.03.1-ce

Надеюсь, это также поможет увидеть мой ответ здесь: https://github.com/docker/machine/issues/2808

person john    schedule 07.04.2017

В моем случае это был мой FortiClient, который вызвал проблему. После отключения docker-machine env default снова работал нормально. Я предлагаю вам проверить, не работает ли в вашей системе какая-либо антивирусная программа.

person Guster    schedule 24.05.2017

для меня бег

docker-machine --debug regenerate-certs -f name_of_your_vm

работал просто отлично.

docker-machine version 0.16.1
virtualBox 6.0

также докер был настроен на использование машины по умолчанию с IP 192.168.99.100

person aurelius    schedule 07.03.2019

Просто запустите докер-машину, а затем повторно создайте сертификаты.

docker-machine start <machine-name>

docker-machine regenerate-certs <machine-name>

Это работает как шарм для меня.

person Asad Shakeel    schedule 12.03.2019

У меня была такая же ошибка. Я исправил это, открыв TCP-порт 2376 в сетевом брандмауэре.

person Mih Boot    schedule 26.11.2019
comment
Вы имеете в виду один из этих портов (twitter.com/bad_packets/status/1199088838636793857), потому что ... twitter.com/sudo_bmitch/status/1199112656810061824 - person VonC; 26.11.2019

Ни один из ответов здесь не помог мне. Моя проблема возникла, когда я хочу активировать оболочку своей виртуальной машины с помощью eval $(docker-machine env по умолчанию).

Затем он пытался получить доступ к порту 2376, который был закрыт, поэтому мне пришлось войти в оболочку виртуальной машины через ssh и активировать следующее правило UFW:

sudo ufw allow 2376
person Sebastian Van Den Noortgaete    schedule 08.10.2020

Решение моей проблемы взято отсюда: https://github.com/docker/machine/issues/3845#issuecomment-271935924

Цитировать:

Если вы устанавливаете docker-machine в первый раз, у вас нет на этом хосте самозаверяющего центра сертификации, который будет использоваться для создания сертификата вашего клиента и столько же сертификатов сервера, сколько машин, которые вы создадите позже. Этот ЦС создается, когда вы пытаетесь создать машину, если этот ЦС еще не создан. Таким образом, если вы попытаетесь сгенерировать несколько серверов параллельно (с помощью скрипта), то вы сгенерируете столько же самоподписанных (корневых) ЦС, сколько и docker createcommands, причем все они будут написаны в одном и том же месте, которое кажется беспорядочным. окружающая среда, например. распространение различных ca.pem на удаленные машины, которые соответствуют окончательной версии, в результате чего cert.pem (идентификация хоста) будет подписан бывшим ca.pem, которого больше не существует… или любая другая ненормальная ситуация.

Чтобы исправить это, прежде всего вам нужно удалить существующий самозаверяющий ЦС. Это можно сделать, удалив папку ~/.docker/machine/certs (ПРИМЕЧАНИЕ. Обратите внимание, что это приведет к созданию нового самозаверяющего ЦС для использования докер-машиной и приведет к тому, что ваши существующие машины не смогут подключиться к демону). Это заставит вашу докер-машину снова генерировать действительные сертификаты. Затем для моего варианта использования я создаю первую машину на переднем плане, а все остальные выполняются параллельно. Это приведет к созданию одного корневого самозаверяющего ЦС в изоляции, а затем будет использоваться для дальнейших команд создания докер-машины. Оно работало завораживающе!

Причина, по которой я смог подключиться к хосту по ssh, заключается в том, что существует другая пара ключей для генерации sshing для каждого хоста, который не был укушен этим.

Подводя итог, вот что я в итоге сделал:

  1. Узнайте, какую команду выполняет docker-machine. Я использовал его с gitlab-runner, поэтому мне пришлось запустить gitlab-runner в режиме отладки, чтобы увидеть, какая команда выполняется на докер-машине.

  2. затем остановите gitlab-runner: gitlab-runner stop

  3. затем удалите сертификат: rm -rf ~/.docker/machine/certs

  4. затем запустите одну команду (из шага № 1), чтобы заново создать сертификаты (помните - причина, по которой это не сработало, заключается в том, что он пытался создать его несколько раз)

  5. затем перезапустите gitlab-runner: gitlab-runner start

Работал на меня!

person Alon Gouldman    schedule 03.06.2021

For reader using brew in 2021, after your somehow upgrade virtualbox cask

  1. Системные настройки... › Безопасность и конфиденциальность › (Разблокировать пальцем) Разрешить.
    ‹‹Ваш компьютер должен перезагрузиться››.
  2. docker-machine restart default. Готово
person Rainning    schedule 21.07.2021