Запуск Docker для Windows, Ошибка при экспорте портов

Я знаю, что есть много вопросов о запуске Docker в Windows, однако этот вопрос касается запуска нового Docker для Windows, Windows.
В моем случае я использую Windows 10 Pro 64 бит. Согласно сайту, эта версия должна поддерживаться. Я слежу за учебником, который я нашел здесь: https://prakhar.me/docker-curriculum/
Конечно, я также пробовал следовать официальному руководству: https://docs.docker.com/docker-for-windows/

В обоих учебных пособиях я получаю то же сообщение об ошибке при попытке назначить порт, используя либо параметр -P, либо при попытке указать порт -p 8080:5000:

В официальном руководстве я запустил docker run -d -p 80:80 --name webserver nginx и получил:

C:\Program Files\Docker\Docker\Resources\bin\docker.exe: ошибка ответа от демона: драйвер не смог выполнить внешнее подключение на веб-сервере конечной точки (f9946544e4c6ad2dd9cb8cbccd251e4d48254e86562bd8e6da75c3bd42c7e45a): Ошибка при запуске userland proxy: mkdir/port/tcp:0.0.0.0: 80: tcp: 172.17.0.2: 80: ошибка ввода/вывода.

Следуя неофициальному руководству, я запустил docker run -p 8888:5000 prakhar1989/catnip и получил в основном ту же ошибку:

C:\Program Files\Docker\Docker\Resources\bin\docker.exe: ошибка ответа от демона: драйвер не выполнил программирование внешнего подключения на конечной точке focus_swartz (48a0c005779c6e89bf525ead2ecff44a7f092495cd22ef7d19973002963cb232): Ошибка при запуске userland proxy: mkdir/port/tcp:0.0.0.0: 8888: tcp: 172.17.0.2: 5000: ошибка ввода/вывода.

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

Доступна версия docker:

  • Докерная версия 1.12.3, сборка 6b644ec`
  • docker-compose версия 1.8.1, build 004ddae`
  • версия docker-machine.exe 0.8.2, build e18a919`

Любая помощь будет очень оценена. Спасибо.

Ответ 1

Это вызвано конфликтом нумерации портов: проблема с github здесь https://github.com/docker/compose/issues/3277

По сути порт используется! Причина сброса сработала в том, что он стёр другие сопоставления.

Ответ 2

Здесь новый поворот.

Последнее обновление Windows 10 (обновление Fall Creators, 2017) имеет новую "функцию". Он автоматически запускает любые приложения, которые запускались при последнем отключении.

Это восстанавливает Docker для Windows в плохом состоянии. Это показало, что эти порты использовались чем-то другим - это был призрак самого себя. Это объясняет, почему эти порты все еще используются, хотя я остановил/начал свои контейнеры и даже перезагрузился!

Решение в этом случае - просто перезапустить демон Docker.

Чтобы предотвратить это после следующего выключения, не используйте кнопку выключения. Введите это вместо:

shutdown /s /t 0

Это обходит новую функцию.

См. ответ от Джейсона [MS] в этой теме:

https://answers.microsoft.com/en-us/insider/forum/insider_wintp-insider_perf-insiderplat_pc/programs-autostart-after-boot-in-windows-10-fall/09dd8d3e-7b36-45d1-9181-6587dd5d53ab

Здесь один парень обходной путь (с конца этой нити - сам не пробовал):

http://www.icttoolbox.nl/info/stop-windows-10-creator-fall-reopening-programs-reboot/

Ответ 3

Перезапуск демона Docker временно устраняет эту проблему, но, чтобы в конечном итоге избавиться от нее, мне пришлось отключить быстрый запуск Windows 10, как описано в функции @biscuit314.

Чтобы отключить быстрый запуск Windows 10, перейдите в Панель управления> Параметры электропитания> Выберите, что делают кнопки питания> Изменить параметры, которые в данный момент недоступны> Снимите флажок Включить быстрый запуск (рекомендуется) и нажмите Сохранить изменения

Disable fast startup

Ответ 4

1) Остановите все запущенные контейнеры docker stop $(docker ps -a -q) затем

2) Остановите Docker на своем компьютере и перезапустите его.

Затем выполните требуемую команду. Это решит проблему.

Ответ 5

Если это в Windows OS, пожалуйста, перезапустите Docker. Это устранило проблему для меня.

Ответ 6

Для Linux - пользователи Debian,

Используйте docker stop $ (docker ps -a -q) только тогда, когда вы знаете, хотите ли вы остановить все контейнеры или нет.... Если да, тогда, пожалуйста, запустите docker rm $ (docker ps -a -q) для удаления контейнеры....

Затем остановите демон docker - systemctl stop docker Затем запустите демон docker - systemctl start docker

Также проверьте, включен ли демон Docker - статус службы Docker

После выполнения всех вышеперечисленных шагов вы должны быть в порядке.....

Ответ 7

Попробуйте остановить Docker и снова запустить его в режиме администратора. После запуска откройте Power Shell в режиме администратора. Поскольку ошибка говорит "mkdir", возможно, это решит вашу проблему. Я не уверен, но у меня это сработало. В случае использования -P конфликт портов не рассматривается как причина ошибки, если -P выберет порты случайным образом. Сама ошибка была не совсем дружественной для меня, но, поскольку я увидел на ней слово mkdir, я предположил, что это может быть ошибкой разрешения, поэтому я перезапустил docker в режиме администратора и запустил командную оболочку в режиме администратора.

Ответ 8

Я перепробовал все предложения по этой проблеме: убил все контейнеры, перезапустил Docker Desktop, отключил "Быстрый запуск", перезагрузил компьютер, убедившись, что "Экспериментальные функции" были отключены. Ничего из этого не сработало.

Я в конце концов запустил его. Вот некоторые вещи, которые вы можете попробовать (потому что я не уверен, что на самом деле это исправить).

  1. Найдите "Docker Desktop" и щелкните правой кнопкой мыши "Запуск от имени администратора..."
  2. Обратите внимание на порт, на который он жалуется. Некоторые люди говорят, что это может быть просто недружественным способом Docker сказать "этот порт используется". В моем случае порт был 80. Я зашел в Службы на Windows Pro и отключил "Службу публикации в Интернете", чтобы быть в безопасности.