Опция публикации в Docker

#docker #vue.js #dockerfile #vue-cli-3 #docker-run

#docker #vue.js #dockerfile #vue-cli-3 #docker-выполнить

Вопрос:

Я пытаюсь запустить приложение Vue локально внутри контейнера Docker и у меня проблема с публикацией на указанный порт.

Вот мой файл Dockerfile

 FROM node:lts-alpine

RUN mkdir -p /app
COPY . /app
WORKDIR /app

RUN npm install
RUN npm run build

EXPOSE 3000

CMD ["npm", "start"]
  

В корневом каталоге моего проекта я запускаю

 docker build --tag projectname .
  

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

 docker run -p 3000:3000 --name projectname projectname
  

В выходных данных приведены некоторые рекомендации по разделению кода для уменьшения размера, но ошибок нет, и в нем указано, что я должен иметь доступ к приложению из http://localhost:8080 , но на этой странице отображается ошибка «отказано в подключении».

У меня сложилось впечатление, что опция публикации должна прослушивать открытый порт 3000 и перенаправлять трафик на локальный порт 3000.
Однако, похоже, этого не происходит.

Я запускаю Docker для Windows, что также может быть частью проблемы.

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

1. Я не понимаю, почему вы используете http://localhost:8080 для доступа к порту 3000. Есть ли два приложения? В противном случае, почему вы не получаете доступ http://localhost:3000 к своему браузеру? В-третьих, работает ли это, если вы выполняете код своего узла на своем хосте?

2. открытый порт равен 3000, поэтому флаг -p 3000:3000 должен заставить контейнер прослушивать localhost:3000 . Я не хочу использовать 8080, это только то, что напечатано в выходных данных. Запуск кода локально (вне Docker), он работает просто отлично.

Ответ №1:

Попробуйте выполнить эту команду docker run -p 3000:8080 --name projectname projectname , а затем получить доступ к приложению по адресу localhost:3000 на главном компьютере docker.

Если это сработает, то либо обновите в вашем Dockerfile EXPOSE 3000 into EXPOSE 8080 , либо запустите ваш http-сервер на порту 3000 вместо 8080 внутри вашего приложения. Этот второй шаг необязателен, но он поможет другим пользователям понять, что контейнеры, запущенные из этого образа, должны прослушивать порт, указанный в файле Dockerfile.

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

1. это определенно сработало! Один вопрос, когда я выставляю 3000 в Dockerfile, не следует ли с помощью -p 3000:3000 сообщить docker run о прослушивании порта 3000? Похоже, что контейнер будет использовать 8080 по умолчанию, несмотря ни на что.

2. EXPOSE 3000 — это просто информация. Другими словами, это просто способ сообщить другим разработчикам, которые будут использовать это изображение, что оно должно прослушиваться на этом порту.