Докер недоступен после компьютерного сна

Я только что установил docker, используя docker-toolbox 1.8.2 в Windows 10.

Из-за этой проблемы мне пришлось воссоздать изображение докера с помощью этих команд

docker-machine rm default
docker-machine --native-ssh create -d virtualbox default

После этого он работает нормально, за исключением одной проблемы:

Когда компьютер перешел спать, а затем снова просыпается, команды докеров больше не могут соединяться. Пример:

> docker images
An error occurred trying to connect: Get https://192.168.99.100:2376/v1.20/images/json: 
dial tcp 192.168.99.100:2376: ConnectEx tcp: A connection attempt failed because the 
connected party did not properly respond after a period of time, or established connection 
failed because connected host has failed to respond.

Однако docker-machine указывает, что машина работает:

> docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM
default   *        virtualbox   Running   tcp://192.168.99.100:2376

Я также могу подтвердить в VirtualBox, что экран виртуальной машины кажется активным.

Я попытался запустить и остановить машину, но это не помогает

C:\x> docker-machine stop default
C:\x> docker-machine start default
Starting VM...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
C:\x> docker-machine env default --shell=powershell

Как ни странно, последняя команда зависает, поэтому я никогда не получаю никаких настроек среды.

Единственное, что помогает - перезагрузить весь ПК. Но это должно быть ненужным?

Я также разместил это как проблему в репозитории docker github, но это было закрыто. Связанная с этим проблема, похоже, таковой, но для Windows никаких обходных решений и решений не было.

Ответ 1

После работы с VirtualBox + Docker Toolbox я наконец нашел способ, как заставить Docker снова работать (даже без перезапуска всех контейнеров):

  • Просыпай компьютер от сна
  • Попробуйте docker images (не работает)
  • Открыть VirtualBox → Закрыть VM с сохранением состояния (CTRL + V)
  • Запустите вашу виртуальную машину снова
  • Повторите попытку docker images (теперь она должна работать)

Обратите внимание: все шаги только в VirtualBox! Запуск docker-machine restart default приведет к созданию другого адаптера только для хоста, чего вы не хотите. Если вы все равно это сделали, удалите все дополнительные адаптеры (Файл- > Настройки- > Сеть в VirtualBox), затем выполните шаги 1-5.

Ответ 2

Я испытал те же самые симптомы в Windows 8.1... Дело в том, что это не проблема, связанная с докере, но больше о том, как Windows управляет сетевыми адаптерами VirtualBox после сна (я думаю...). В моем случае виновником является то, что адреса сетевого адаптера стали закрытыми после сна (они стали адресами 169. *).

Кредиты этому парню, который дал мне эту идею: http://lyngtinh.blogspot.ca/2011/12/how-to-disable-autoconfiguration-ipv4.html

Fix:

  • Запустите командную строку в качестве администратора
  • Узнайте "полезные" сетевые адаптеры: ipconfig /all. В моем случае полезными были те, которые были отмечены как "VirtualBox Host-Only Ethernet Adapter", у которых не было приватных ips (не начиная с 169.).
  • Запустите эту команду и обратите внимание на "Idx" полезных сетевых адаптеров VirtualBox: netsh interface ipv4 show inter.
  • Запустите эту команду, чтобы отключить автоматическую настройку IP: netsh interface ipv4 set interface <idx> dadtransmits=0 store=persistent. Замените <idx> на каждый индекс, найденный на предыдущем шаге.
  • Перезагрузка Windows

Впоследствии я смог docker-machine start default, затем docker-machine env default --shell cmd, перевести компьютер в режим сна, просыпаться и снова запускать docker-machine env default --shell cmd.

Ответ 3

Я обнаружил, что удаление "только хост-адаптера" (File- > Preferences- > Network on VirtualBox) и перезагрузка док-машины помогает.

Не настоящее решение. Но, вероятно, лучше перезагрузить компьютер.

Ответ 4

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

Откройте окно powershell/command (у меня есть больше всего успеха, если я запустил все команды док-машины в окне powershell, открывшемся как администратор, я не знаю, если это важно или нет), затем выполните (где "dev" - это имя экземпляра вашей докерной машины):

docker-machine ssh dev

Затем на открывшемся терминале запустите:

sudo shutdown -r now

Когда компьютер перезагружается, он, кажется, обновляет сеть и работает правильно. Обратите внимание, однако, что просто запуск docker-machine restart dev сделал не для меня такой же эффект.

Ваша машина должна быть запущена, прежде чем вы сможете сделать ssh, поэтому, если она не запущена, выполните docker-machine start dev перед тем, как попробовать SSH.

Ответ 5

Имела ту же проблему в Windows 8.1 и докерной панели инструментов 1.12.0 Ни одно из вышеперечисленных решений не работало для меня.

[редактировать]

Нашел другой способ сделать работу докера после пробуждения системы:

  • В окне терминала быстрого запуска Docker остановите процесс докерера Ctrl-C (если он все еще запущен)
  • Команда запуска docker-compose down
  • Завершить докер с помощью docker-machine stop default
  • Выход из окна терминала Ctrl-D
  • Запустите Quickstart Terminal еще раз и выполните все последующие шаги, которые вам нужны.

Ответ 6

Это сработало для меня на хост-машине Windows.

Настройте сетевой адаптер на

1) Разрешить сетевому адаптеру разбудить компьютер,

2) Позвольте волшебному пакету разбудить компьютер,

3) Разрешить IPV6

http://www.worldstart.com/dropped-internet-connection-in-sleep-mode/

Кроме того, в настройках сети виртуального ящика перейдите к расширенному и разрешите беспорядочный режим для машин VM или разрешите все