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?
REACT_APP_API_ENDPOINT
lorsque exécute la commande docker build
. Ou existe-t-il un moyen plus pratique et plus dynamique de transmettre cette variable à react-admin?
3 Réponses :
dockerfile
ARG REACT_APP_API_ENDPOINT
construction du docker --build-arg REACT_APP_API_ENDPOINT = 192.168.0.1
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.
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
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 lesLe 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