J'ai un fichier docker-compose.yml
et dans le terminal, je suis typing docker-compose up [something]
, mais j'aimerais également passer un argument à docker-compose.yml
. Est-ce possible? J'ai lu sur les variables d'interpolation et essayé de spécifier une variable dans le fichier .yml
à l'aide de ${testval}
, puis de docker-compose up [something] var="test"
, mais le message d'erreur suivant s'affiche:
AVERTISSEMENT: La variable testval n'est pas définie. Par défaut, une chaîne vide.
ERREUR: Aucun service de ce type:testval=test
Sur la base de dnephin answer , j’ai créé ce exemple de dépôt dans lequel vous pouvez passer une variable pour une composition fixe.
L'utilisation est simple:
TEST= docker-compose up
pour créer et démarrer les conteneurs app
et db
. L'API devrait alors être en cours d'exécution sur votre démon docker sur le port 3030. TEST=DO docker-compose up
pour créer et démarrer les conteneurs app
et db
. L'API doit exécuter le npm run test
à l'intérieur du fichier package.json
. $env:TEST="";docker-compose up
pour créer et démarrer les conteneurs app
et db
. L'API devrait alors être en cours d'exécution sur votre démon docker sur le port 3030. $env:TEST="do";docker-compose up
pour créer et démarrer les conteneurs app
et db
. L'API doit exécuter le npm run test
à l'intérieur du fichier package.json
. Vous devez passer les variables en tant que variables d'environnement:
testvar=test docker-compose up ...
ou
export testvar=test
docker-compose up
Je ne suis pas sûr de ce que vous voulez faire ici, mais si vous avez besoin de passer une variable d'environnement à un conteneur spécifique, docker-compose.yml vous permet de le faire:
web:
...
environment:
- Rails_ENV=production
- VIRTUAL_Host=www.example.com
- VIRTUAL_PORT=3011
Ces variables seront spécifiques au conteneur dans lequel vous les avez spécifiées et ne seront pas partagées entre les conteneurs.
De plus, "docker-compos up" ne prend aucun argument.
docker-compose
n'incluez pas d'indicateur ni de commande pour passer des arguments.
Compose est avant tout un outil permettant d’exécuter des services et non de créer des images .Essayez d’utiliser la variable ARG
définie dans chaque fichier docker comme argument.
Il ne sera pas possible de prendre en charge chaque scénario de génération unique car docker-compose
n'est pas conçu à cet effet. vous ne pouvez réellement supporter que les scénarios de construction les plus courants.
Vous pouvez voir plus d'informations sur son sujet ici .
Vous pouvez utiliser docker-compose build --build-arg app_env=production
pour construire une image. Ensuite, vous pouvez utiliser docker-compose up
. Cela va attacher à l'image construite.
# docker-compose.yml
services:
service_name:
build:
context: .
args:
- app_env=development
....
# Dockerfile
...
ARG app_env
ENV RACK_ENV $app_env
RUN if [ ${APP_ENV} = production ]; run command; else run another command; fi
...
Puis tapez suivant à la ligne de commande
docker-compose build --build-arg app_env=production
docker-compose up