Докер недоступен после компьютерного сна
Я только что установил 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 или разрешите все