Ошибка ответа от демона: драйвер не смог выполнить внешнее подключение на конечной точке 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
Пытаться:
- отключение "Экспериментальных функций" в меню "Настройки"/"Демон"
- перезапуск докера
- остановка всех контейнеров.
Чтобы остановить все контейнеры, запустите: 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