Получить переменные окружения из контейнера docker с реагированием и машинописью - PullRequest
0 голосов
/ 12 апреля 2020

Я разрабатываю веб-сайт с бэкэндом приложения 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

1 Ответ

0 голосов
/ 12 апреля 2020

Вам нужно будет использовать префикс REACT_APP_

Необходимо создать пользовательские переменные среды, начиная с REACT_APP_. Любые другие переменные, кроме NODE_ENV, будут игнорироваться, чтобы избежать случайного раскрытия секретного ключа на компьютере, который может иметь то же имя. Изменение любых переменных среды потребует перезапуска сервера разработки, если он работает.

...