Невозможно запустить сборку разработки приложения React в контейнере Docker с использованием узла: alpine - PullRequest
0 голосов
/ 16 октября 2019

У меня есть приложение 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 для этого контейнера, я просто вижу вывод сценариев реакции, подтверждающий, что мое приложение скомпилировано.

1 Ответ

0 голосов
/ 16 октября 2019

Похоже, приложение связывается с контейнером localhost.

Попробуйте отладить

docker exec -it <container_id> ash
#then
curl localhost:60001

Это должно работать на localhost.

Чтобы сделать его доступным снаружи контейнеравыполните следующие действия.

# i think its window syantax
"start": "set PORT=60001 HOST=0.0.0.0 react-scripts start",

или

"start": "PORT=60001 HOST=0.0.0.0 react-scripts start",

ВЕДУЩИЙ:

По умолчанию веб-сервер разработки связывается со всемиимена хостов на устройстве (локальный хост, сетевой адрес локальной сети и т. д.). Вы можете использовать эту переменную для указания другого хоста.

расширенная конфигурация опция HOST response-app

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...