Ошибка Dockerfile «порт уже выделен». Как решить эту проблему?

#docker

#docker

Вопрос:

Итак, я пытаюсь запустить Docker из подключаемого модуля VS code,

Пытаюсь создать образ Docker, чтобы посмотреть, работает ли он.

И я получаю это сообщение об ошибке

Выполнение команды: docker run --rm -it -p 3000:3000/tcp -p 5000:5000/tcp ecommerce:latest

docker: Ответ об ошибке от демона: сбой драйвера при программировании внешнего подключения на конечной точке clever_hermann (4c4b6a299257d59a8bad812ee498ecbe689a1e134492dfbb8d9da4dc2acfee35): Ошибка привязки для 0.0.0.0: 5000: порт уже выделен. Терминальный процесс «/usr/bin/zsh ‘-c’, ‘docker run —rm -it -p 3000:3000 / tcp -p 5000:5000/ tcp ecommerce: latest» завершен с кодом выхода: 125.

Это мой Dockerfile

 FROM node:latest

RUN mkdir /app

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

EXPOSE 3000

EXPOSE 5000

CMD [ "npm", "run", "dev" ]
  

Есть какие-либо подсказки о том, как продолжить?

Комментарии:

1. Есть ли у вас какое-либо другое приложение, запущенное на вашем порту 5000? (порт хоста, а не гостевой)

2. по-видимому, да, но я понятия не имею, как это проверить. Я даже не знаю, что такое порт в смысле ИТ. Но проблема решена с помощью приведенного ниже ответа

3. Конечно, решаемая. Потому что он не использует порт 5000. 5000 не зарезервированы. Возможно, вы запустили сервер npm на 5000 или другой службе

4. @mommonteirocl я не понимаю. Какая вещь не использует порт 5000? что значит «порт 5000 не зарезервирован»?

Ответ №1:

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

 docker run --rm -it  -p 8282:3000/tcp -p 8181:5000/tcp ecommerce:latest
  

В приведенной выше команде вы сопоставляете порт контейнера 3000/tcp со своей машиной localhost:8282 и то же самое для 5000/tcp .

После запуска контейнеров перейдите в браузер http://localhost:8181 и http://localhost:8282 для соответствующего вывода

Комментарии:

1. @MrFacundo если это решило проблему, пожалуйста, примите мой ответ!!

2. как мне это сделать?

3. @MrFacundo в левой части моего ответа есть кнопка ✔, поэтому нажмите на нее. Чуть ниже кнопки upvote и downvote

4. о, круто, я не знал, что должен был это сделать. Еще раз спасибо, просто из любопытства, чем это полезно для вас (или любого другого пользователя)? ты получаешь баллы? что вы делаете с этими точками, наземными заданиями?

5. @MrFacundo это просто даст несколько очков мне и вам тоже. Нет, нет, это никого не приведет к выполнению заданий. Если вы примете ответ, это будет полезно для других в будущем, если у кого-нибудь возникнет такая же проблема, тогда они сначала посмотрят на принятый ответ. вот и все!!