Я разрабатываю веб-сайт с бэкэндом приложения python flask и интерфейсом реагирования и машинописи.
Я хочу докеризировать их для разработки.
Я написал следующие dockerfiles :
back dockerfile
# Use an official Python runtime as an image
FROM python:3.6
EXPOSE 5000
WORKDIR /app
# copy src files in app folder
COPY ./src/* /app/
# Install any needed packages specified in requirements.txt
RUN pip install -r requirements.txt
# Run api ap.py when the container launches with specific ip to reach it from the host
CMD python -m flask run --host=0.0.0.0
шрифт dockerfile
FROM node:13.12.0-alpine
# set working directory
WORKDIR /app
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH
# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent
RUN npm install react-scripts@3.4.1 -g --silent
# add app
COPY . ./
# start app
CMD ["npm", "start"]
Для запуска моего контейнера я использую эти команды:
# Create docker network
docker network create --subnet=172.28.0.0/16 --gateway=172.28.5.254 example_network
# Create the api
docker run -d --rm --name backend --network example_network --ip=172.28.5.1 -v *Back/Source/Code/Dir*:/app -p 5000:5000 backend_img
# Create the front
docker run -it --rm --name front -p 3000:3000 --network example_network --ip=172.28.5.4 -v Back/Source/Code/Dir/src:/app/src front_img
В этом случае все работает хорошо, но значение конечной точки API находится в коде, если я изменяю ip контейнера docker для бэкэнд больше не работает.
У меня следующая проблема: Я пытаюсь передать свою конечную точку бэкэнда как переменные окружения в мой контейнер реагирования docker, но не могу получить значение в реакции, как я могу заставить его работать?
Я пытаюсь использовать следующую команду для переднего контейнера:
# Create the front
docker run -it --rm --name front -p 3000:3000 --network example_network --ip=172.28.5.4 -v Back/Source/Code/Dir/src:/app/src -e API_ENDPOINT=172.28.5.1:5000 front_img
при подключении к docker чтобы получить значение env, все в порядке!
docker exec -ti front sh
echo $API_ENDPOINT
В коде я пытаюсь использовать следующую инструкцию для достижения моего значение окружения:
const API_ENDPOINT=process.env.API_ENDOINT
Но мое значение в консоли не определено! Мой фронт не может подключиться к моей спине
Я также пытаюсь передать значение в качестве аргумента сборки во время сборки образа и поместить значение в файл .env, но всегда с одинаковыми результатами: значение undefined!
новый передний докер-файл
# pull official base image
FROM node:13.12.0-alpine
# set working directory
WORKDIR /app
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH
# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent
RUN npm install react-scripts@3.4.1 -g --silent
# add app
COPY . ./
# define env variables
ARG API_HOST=http://172.28.5.1:5000
ENV API_HOST=$API_HOST
RUN echo $API_HOST
RUN echo "API_HOST=$API_HOST" > .env
# start app
CMD ["npm", "start"]
Заранее благодарен за прочтение и ваши ответы! Извините за мои основы c engli sh