Я установил контейнер Ubuntu LXC на Proxmox и внутри этого контейнера настроил Docker и Portainer. В Docker я работаю над проектами Node.js (бэкэнд) и React.js (интерфейс). Хотя проект хорошо работает за пределами Docker, я сталкиваюсь с ошибками при попытке настроить весь стек внутри Docker. Серверная часть работает без проблем. Почему у меня могут возникнуть трудности с подключением к серверной части в Docker? У меня есть файл с именем dev-proxy.js
, который мне нужно выполнить, чтобы установить соединение с серверной частью. Впоследствии я запускаю npm start
для запуска проекта. Я не знаю, как включить обе эти команды в Dockerfile, чтобы обеспечить правильное выполнение. Я пробовал разные конфигурации: иногда серверная часть подключается, а внешний интерфейс не работает, иногда наоборот.
Dockerfile для фронтенда
FROM node:18.19.0
# Set the working directory
WORKDIR /opt/my-project/
# Copy package.json and package-lock.json (if exists)
COPY package*.json ./
# Install dependencies
RUN yarn
# Copy the rest of the application code
COPY . .
# Run proxy-dev script
CMD ["sh", "-c", "node dev-proxy.js && npm start"]
Ответ на вкладке «Сеть» браузера
Request URL:
http://192.168.61.112:3000/undefined/Controllers/Login.ashx
Request Method:
GET
Status Code:
500 Internal Server Error
Remote Address:
192.168.61.112:3000
Referrer Policy:
strict-origin-when-cross-origin
Как я обычно запускаю интерфейс локально (рабочий метод) без Docker
git pull my-git-url
yarn
node dev-proxy.js
# Then, in another terminal window
npm start
Как настроить подключение API и запустить проект из файла Docker? или Могу ли я использовать NGINX?
🤔 А знаете ли вы, что...
React обеспечивает высокую производительность благодаря эффективной обработке изменений DOM.
Если обычно вы запускаете команды в двух отдельных окнах терминала, то в Docker вы обычно запускаете их в двух отдельных контейнерах. Когда вы запускаете контейнер, вы можете переопределить CMD
изображения, чтобы использовать его для запуска двух контейнеров с альтернативными командами.
В Dockerfile выберите один или другой параметр по умолчанию CMD
CMD ["npm", "start"]
Если вы запускаете это в Compose, для двух контейнеров используйте одну и ту же строку build:
или image:
. Если это build:
, Compose дважды повторит механизм создания изображения, но второе изображение будет полностью получено из кэша и запустится быстро, и вы получите два сгенерированных имени для одного и того же базового изображения. Затем переопределите command:
по мере необходимости.
services:
backend: { ... }
frontend:
build: ./frontend
ports: ['3000:3000']
proxy:
build: ./frontend
command: node dev-proxy.js