Dans docker-compose
, j'étais confus jusqu'à maintenant
--Fichier à lire par ʻenv_file dans
docker-compose.yml --Fichier nommé
.env`
Notez la différence pour que personne d'autre ne fasse la même erreur.
Étant donné que la gestion des variables d'environnement est légèrement différente entre Linux et Windows, je pense que les personnes qui sont habituées à Windows ou qui utilisent le docker pour Windows sont susceptibles de se faire prendre.
C'est fondamentalement la même chose que cette question et réponse, mais avec un peu plus d'informations.
docker-compose cannot understand my env_file | stack overflow
Référence officielle Documentation Docker | Variables d'environnement dans compose Je vais vous expliquer tout en organisant les connaissances avec.
docker-compose.yml
Dans docker-compose.yml
, vous pouvez utiliser les variables d'environnement du shell côté hôte.
Par exemple
docker-compose.yml
web:
image: "webapp:${TAG}"
Si la variable d'environnement «TAG» est définie du côté hôte, cette valeur sera insérée.
Par exemple, si TAG
est défini sur v1.5
, le nom de l'image créée par docker-compose build
sera webapp: v1.5
.
Vous pouvez vérifier quelle valeur est insérée dans la variable d'environnement set avec la commande docker-compose config
.
$ echo $TAG
#Echo pour Windows%TAG%Confirmer avec
v1.5
$ docker-compose config
version: '3'
services:
web:
image: 'webapp:v1.5'
.env
Cependant, les variables d'environnement que vous souhaitez utiliser pour l'hôte ne sont pas toujours définies.
Pour contourner ce problème, vous pouvez définir la valeur par défaut de la variable d'environnement utilisée dans docker-compose.yml
dans le fichier .env
.
Par exemple dans le fichier .env
.env
TAG=v1.5
S'il est défini sur, le nom de l'image sera webapp: v1.5
comme ci-dessus.
Le fichier .env
doit se trouver dans le répertoire où vous avez exécuté la commande ** docker-compose
(répertoire de travail) **
Il ne sera pas reconnu ailleurs.
(Voir Déclarer les variables d'environnement par défaut dans le fichier)
Ce paramètre de fichier .env
est une solution de contournement si l'hôte ne possède pas les variables d'environnement que vous souhaitez utiliser.
Bien sûr, si une variable d'environnement avec le même nom est définie sur l'hôte, cela aura la priorité.
$ export TAG=v2.0
#Pour Windows, définissez TAG=v2.Définir la variable d'environnement sur 0
$ docker-compose config
version: '3'
services:
web:
image: 'webapp:v2.0'
** En dehors de l'histoire ci-dessus ** En utilisant l'élément ʻenvironment dans
docker-compose.yml, la variable d'environnement pour le conteneur lancé par
docker-compose run ou
docker-compose up` Vous pouvez définir le.
docker-compose.yml
web:
environment:
- DEBUG=1
Ensuite, dans le conteneur qui a démarré
$ echo $DEBUG
1
Et les variables d'environnement sont définies.
dans
docker-compose.yml`Vous pouvez également écrire les variables d'environnement de ce conteneur dans un fichier séparé. Par exemple, dans un fichier appelé web-variables.env
web-variables.env
DEBUG=1
FOO=bar
Et écris
web-variables.env
web:
env_file:
- web-variables.env
Et, si vous spécifiez le fichier à lire dans l'élément de ʻenv_filedans
docker-compose.yml`,
Dans le container
$ echo $DEBUG
1
$ echo $FOO
bar
Et les variables d'environnement sont définies.
De ce qui précède,
--Fichiers lus par ʻenv_file`
.env
mentionné précédemmentVous pouvez voir que ** fonctionne complètement différent **.
--$ ...
dans docker-compose.yml
est fondamentalement une variable d'environnement hôte, pas une variable facile à utiliser.
Enfin, en cherchant, autant que possible pour aider ceux qui rencontrent des difficultés avec ce problème Voici comment je suis entré dans ce problème.
docker-compose.yml
comme des variables ordinairesSelon le cas, la valeur à affecter à $ ...
dans docker-compose.yml
est utilisée correctement.
J'ai souffert de ce fichier env_file et .env en essayant d'accommoder divers cas.
À l'origine, vous devez diviser docker-compose.yml
en utilisant l'option -f
.
Lorsque docker-compose sous un proxy, dans build
de docker-compose
,
Vous devez définir des variables d'environnement pour le proxy telles que HTTP_PROXY
dans le conteneur lancé.
Pour résoudre ce problème, vous pouvez définir l'élément build> args
et l'élément ʻenvironment:de
docker-compose`.
J'ai souffert de ce fichier env_file et .env ici.
Sur cette base, j'ai fait un article pour docker-compose
sous le proxy.
Combinez les paramètres de proxy dans docker-compose en un seul fichier
Advanced Container Configuration | VSCode
Dans la fonction de débogage à distance (conteneur distant) à l'aide du menu fixe de VSCode
J'ai essayé de lancer un conteneur distant en spécifiant docker-compose.yml
dans la section dockerComposeFile
de devcontainer.json
.
À ce moment-là, j'ai essayé d'utiliser le fichier .env pour définir le proxy,
Le fichier .env n'a pas pu être défini correctement dans le conteneur distant même dans le même dossier que docker-compose.yml
.
La cause est comme mentionné ci-dessus
Le fichier .env
doit être dans le répertoire lorsque vous avez exécuté la commande ** docker-compose
**
C'était ça.
Dans le conteneur distant, docker-compose est exécuté dans le répertoire racine de VSCode, donc
J'ai mis le fichier .env
dans le répertoire racine et cela a bien fonctionné.
(Voir Github Microsoft VSCode issue # 222)
Recommended Posts