#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 — это просто информация. Другими словами, это просто способ сообщить другим разработчикам, которые будут использовать это изображение, что оно должно прослушиваться на этом порту.