0
votes

Passer des variables d'environnement personnalisées dans l'application react-admin dockérisée

J'utilise react-admin dans un projet qui doit s'exécuter dans un essaim Docker .

Comme nous avons plusieurs environnements, j'ai défini une variable d'environnement REACT_APP_API_ENDPOINT qui pointe vers l'API de notre application avec laquelle react-admin interagira.

Jusqu'à présent, j'ai appris que cela La variable doit être "intégrée dans react-admin" au moment de la construction. J'ai donc ajouté ce qui suit à mon Dockerfile :

ARG REACT_APP_API_ENDPOINT
ENV REACT_APP_API_ENDPOINT $REACT_APP_API_ENDPOINT

Si cela est vrai, mes hypothèses suivantes sont-elles correctes?

  • Je dois définir la valeur de REACT_APP_API_ENDPOINT lorsque exécute la commande docker build .
  • J'aurai besoin d'une image Docker par environnement.

Ou existe-t-il un moyen plus pratique et plus dynamique de transmettre cette variable à react-admin?


2 commentaires

Vous avez probablement besoin d'un conteneur par environnement, pas d'une seule image. L'image commune peut être utilisée pour créer de nombreux conteneurs configurés avec la variable d'environnement propagée REACT_APP_API_ENDPOINT . Et cette partie peut être effectuée au moment de la création de conteneurs, pas lors de la création d'images. Bien sûr, cela peut être fait plus tôt, et plus tard écrasé en exécutant le processus. docs.docker.com/engine/reference/run/#env- environnement-variab‌ les


Le message a été modifié ... oui - basé sur votre image source, tout avant le point d'entrée, vous pouvez ajuster pendant le processus de construction


3 Réponses :


0
votes
    1.

dockerfile

ARG REACT_APP_API_ENDPOINT

construction du docker --build-arg REACT_APP_API_ENDPOINT = 192.168.0.1

  1. Vous aurez besoin de créer un conteneur par environnement

0 commentaires

0
votes

Je l'ai enfin fait fonctionner.

Dockerfile

ARG REACT_APP_API_ENDPOINT
ENV REACT_APP_API_ENDPOINT $REACT_APP_API_ENDPOINT

Ensuite, pour créer le conteneur:
docker build -t monimage --build-arg REACT_APP_API_ENDPOINT = .

Cela me semble un peu bizarre mais je ne pouvais pas trouver d'autre moyen que React ont besoin de variables personnalisées telles que REACT_APP_MY_VARIABLE au moment de la construction.


0 commentaires

0
votes

Au début, je pensais que passer des variables d'environnement dans un fichier docker-compose fonctionnerait, mais en utilisant RUN printenv dans Dockerfile (qui imprime les variables d'environnement système), j'ai trouvé que les variables que je transmettais, n'étaient pas disponibles lorsque React créait des fichiers de production. La clé ici est de passer les variables d'environnement dans Dockerfile, lorsque l'image est créée, avant que les fichiers de construction React ne soient créés. Par conséquent, un Dockerfile comme celui-ci devrait fonctionner:

FROM node:13.12.0-alpine as build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
#declaring react custom environment variable
ENV REACT_APP_API_HOST http://localhost:8080
COPY package.json ./
COPY package-lock.json ./
RUN npm ci --silent
COPY . ./
RUN npm run build


0 commentaires