У меня есть приложение React, основанное на Facebook create-react-app
. Во время разработки я запускаю его на определенном локальном порту (60001). Чтобы добиться этого, я изменил сценарий start
по умолчанию в части scripts
моего package.json на следующее:
"start": "set PORT=60001 && react-scripts start",
Теперь у меня есть требование запустить его вконтейнер Docker, использующий тот же порт. В моем Dockerfile у меня есть эти два этапа:
FROM node:alpine as build
COPY ./package.json /app/package.json
WORKDIR /app
RUN npm install
RUN rm -f .npmrc
FROM build as build-dev
COPY ./public/ /app/public
COPY ./src/ /app/src
EXPOSE 60001
CMD ["npm", "start"]
Обратите внимание, что я выставляю порт на контейнере, к которому я хочу привязать сервер npm dev.
Я строю образ так, как вы ожидаете, нацеливаясь на этап build-dev
Docker выше.
docker build --target build-dev -t my-app:local
Затем я запускаю контейнер следующим образом:
docker run -it -p 60001:60001 my-app:local
Цель состоит в том, чтобы привязать мой локальный порт 60001 к тому же порту в контейнере, когда я ожидаю, что моя сборка приложения dev будет запущена.
Когда я делаю это, я вижу подтверждение того, что npm выполняет правильный скрипт и чтоприложение скомпилировано. Тем не менее, просмотр http://localhost:60001/ ничего не дает. Просто ERR_CONNECTION_REFUSED
, как будто там ничего нет.
Я не вижу, что я делаю здесь неправильно. Есть идеи? Я надеялся, что смогу получить некоторую информацию из журналов контейнера, но когда я запускаю docker logs
для этого контейнера, я просто вижу вывод сценариев реакции, подтверждающий, что мое приложение скомпилировано.