Ошибка ответа от демона: драйвер не смог выполнить внешнее подключение на конечной точке modest_aryabhata

Я прохожу этот урок

создание образа docker с помощью: docker build -t myapp_back.

а затем хотите запустить контейнер с помощью: docker run -p 3000:3000 -d myapp_back

это simlpe узел/экспресс-приложение

Но я получаю ошибку:

C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Ответ об ошибке от демона: драйвер не смог запрограммировать внешнее подключение на конечной точке 3000: tcp: 172.17.0.2: 3000: ошибка ввода/вывода.

Что не так?

мой докер файл:

FROM node:carbon
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ['npm', 'start']

и начать в package.json:

"start": "nodemon src/app.js --exec babel-node"

Ответ 1

Чтобы решить следующую ошибку в Windows: просто перезагрузите Docker (из меню лотка или выбрав параметр "Перезапустить докер..." в "Настройки/Сброс")

Cannot start service YOUR_SERVICE: driver failed programming external connectivity on endpoint ...

Ответ 2

Похоже, это известная проблема из докера: https://github.com/docker/for-win/issues/573

Пытаться:

  1. отключение "Экспериментальных функций" в меню "Настройки"/"Демон"
  2. перезапуск докера
  3. остановка всех контейнеров.

Чтобы остановить все контейнеры, запустите: docker ps -a -q | ForEach { docker stop $_ } docker ps -a -q | ForEach { docker stop $_ }

РЕДАКТИРОВАТЬ: рабочий код ShellScript для остановки всех контейнеров

for a in 'docker ps -a -q'
do
  echo "Stopping container - $a"
  docker stop $a
done

Ответ 3

Просто перезагрузите компьютер, и теперь он работает.

Ответ 4

Я могу заставить докер работать на моем компьютере с Windows 10, восстановив заводские настройки по умолчанию. Перезапуск докера, перезагрузка моей машины не сработала.

Ответ 5

Я работаю под Linux. Если я запускаю docker от имени пользователя root с помощью команды sudo, он работает нормально.

Ответ 6

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

Проблема связана с поведением выключения Windows 10 по умолчанию.

Фактическое исправление может быть достигнуто отключением настроек быстрого запуска Windows:

Панель управления → Параметры питания → Выберите, что делает кнопка питания → Изменить настройки, которые в данный момент недоступны → Переключить Включить быстрый запуск

Ответ 7

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

Ответ 8

На Mac Mojave выполните следующую команду, чтобы узнать, какие процессы используют порт.

sudo lsof -i @localhost:<port_no>

В моем случае я проверял порт 8080, поэтому я запускаю

sudo lsof -i @localhost:8080

Я обнаружил, что http-alt работает на порту 8080, и после получения идентификатора процесса с помощью приведенной выше команды вы можете завершить процессы с помощью

sudo kill -9 <process_id>

Однако в моем случае четыре приложения ArtemisSe, Mail, Google and Slack используют http-alt на порту 8080. Поскольку они выглядят важными приложениями, я изменил свой порт и запустил контейнер на 8888 вместо 8080. Т.е.

docker run -it --rm -p 8888:8080 <imageid or image name>

Ответ 9

В моем случае такая же ошибка в PHP-контейнере. Я решаю изменить публичный порт и работает.

Эта команда выдает ошибку после перезагрузки Windows 10:

docker run -d -p 8080:80 --name php_apache php_app

Решение:

docker run -d -p 8081:80 --name php_apache php_app