Чтение переменных окружения docker через плагин Reaction-env для приложения React для dockerize? - PullRequest
1 голос
/ 08 октября 2019

У меня есть докер-контейнер с настройкой нескольких переменных среды. Я знаю, что в типичном случае использования React не может прочитать эти переменные, так как переменные process.env заменяются во время переноса.

Я пытаюсь обойти это без необходимости раскручивать внутренний серверс помощью плагина под названием реагировать-env .

Основная идея заключается в создании файла .env, который можно записать в сценарий bash. Сценарий bash скопирует все переменные среды в файл .env. Плагин сгенерирует файл env.js, который затем будет использоваться приложением React во время выполнения.

В моей настройке я создал две примерные переменные среды.

  • REACT_APP_SETUP="OK" -в коде .env.
  • REACT_APP_GCP_PROJECT_ID="SOMEID" - для записи в файл bash.

.env

# .env
REACT_APP_SETUP="OK" //prewritten env for testing.

docker-entrypoint.sh

#!/bin/sh
printf "\n" >> /usr/app/.env

//env that is supposed to be copied.
printf 'REACT_APP_GCP_PROJECT_ID="%s"' SOMEID >> /usr/app/.env 
serve build

Dockerfile

# Base version
FROM node:9

# Install yarn
RUN npm install yarn

# Install serve.js
RUN yarn global add serve

# Create app directory
WORKDIR /usr/app

# Copy all necessary files and grant permissions.
# - yarn.lock
# - package.json
# - .env
# - docker-entrypoint.sh
COPY . /usr/app/
COPY yarn.lock /usr/app
COPY package.json /usr/app
COPY .env /usr/app
COPY docker-entrypoint.sh /usr/app/docker-entrypoint.sh
RUN chmod 777 /usr/app/docker-entrypoint.sh

# Install dependencies.
RUN yarn

# Build application.
RUN yarn build

# Set entrypoint of application.
ENTRYPOINT [ "/usr/app/docker-entrypoint.sh" ]

App.jsx

...

console.log(env("SETUP"));
console.log(env("GCP_PROJECT_ID"));

...

Inspect Console

OK
undefined

В приведенном выше примере настройки мы можем видеть, как плагин работает, так как докеризованное приложение генерирует env.js для приложения React, следовательноOK консольный вывод.

Однако я не могу получить файл bash для записи в файл .env, таким образом вывод консоли undefined.

exec при входе в контейнер также показывает файл .env, содержащий записи REACT_APP_GCP_PROJECT_ID="SOMEID" и REACT_APP_SETUP="OK".

Я подозреваю, что env.js генерируется до bashФайл имеет возможность записи в файл .env.

Как я могу записать в мой файл .env, чтобы плагин мог генерировать файл env.js, из которого мое приложение может считывать переменные среды?

1 Ответ

1 голос
/ 08 октября 2019

Я предлагаю вам записать в файл перед сборкой приложения:

FROM node:9

# Install yarn
RUN npm install yarn

# Install serve.js
RUN yarn global add serve

# Create app directory
WORKDIR /usr/app

# Copy all necessary files and grant permissions.
# - yarn.lock
# - package.json
# - .env
# - docker-entrypoint.sh
COPY . /usr/app/
COPY yarn.lock /usr/app
COPY package.json /usr/app
COPY .env /usr/app
COPY docker-entrypoint.sh /usr/app/docker-entrypoint.sh
RUN chmod 777 /usr/app/docker-entrypoint.sh

# Install dependencies.
RUN printf "\n" >> /usr/app/.env
RUN printf 'REACT_APP_GCP_PROJECT_ID="%s"' SOMEID >> /usr/app/.env 
RUN yarn

# Build application.
RUN yarn build

# Set entrypoint of application.
ENTRYPOINT [ "/usr/app/docker-entrypoint.sh" ]

и вашу точку входа:

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