web-dev-qa-db-fra.com

Comment définir build-args dans docker-compose?

J'ai le fichier docker-compose suivant

version: '3'
services:
    node1:
            build: node1
            image: node1
            container_name: node1

    node2:
            build: node2
            image: node2
            container_name: node2

Je peux construire les deux images et les démarrer avec une seule commande

docker-compose up -d --build

Mais j'aimerais utiliser build-args sur les builds. Le script de construction original de l'image en dehors de la portée de composition ressemble à ceci:

#!/bin/sh
docker build \
--build-arg ADMIN_USERNNAME_1=weblogic \
--build-arg ADMIN_PASSWORD_1=weblogic1 \
--build-arg ADMIN_NAME_1=admin \
--build-arg ...
--build-arg ... \
-t test/foo .

Les deux images utiliseraient des build-args du même nom mais de valeur différente. De plus, comme il existe des dizaines d'arguments de génération, il serait pratique de les stocker dans un fichier de propriétés de génération spécifique au service de composition. Est-ce possible avec docker-compose?

2
Tuomas Toivonen

Vous pouvez définir votre args avec votre commande de compilation de docker-compose. 

Exemple Dockerfile:

FROM nginx:1.13

RUN apt-get -y update && apt-get install -y \
    Apache2-utils && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

ARG username
ARG password

RUN htpasswd -bc /etc/nginx/.htpasswd $username $password

docker-composer le fichier:

version: '3'
services:
  node1:
     build: ./dir

Le ./dir contient le fichier Docker et je construis avec cette commande:

docker-compose build --build-arg username="my-user" --build-arg password="my-pass"

Je vois déjà:

Step 5/5 : RUN htpasswd -bc /etc/nginx/.htpasswd $username $password
 ---> Running in 80735195e35d
Adding password for user my-user
 ---> c52c92556825

J'apporte ma pile

docker-compose up -d

Maintenant, je peux vérifier à l'intérieur du conteneur nginx, ainsi que mon nom d'utilisateur et mon mot de passe (chiffré):

docker@default:~/test$ docker exec -it test_node1_1 bash
root@208e4d75e2bd:/# cat /etc/nginx/.htpasswd
my-user:$apr1$qg4I/5RO$KMaOPvjbnKdZH37z2WYfe1

En utilisant cette méthode, vous pouvez passer build args à votre pile docker-compose.

4
lvthillo

Vous pouvez spécifier les arguments directement dans votre fichier docker-compose:

node1:
    build: node1
        args:
            ADMIN_USERNNAME: weblogic1
            ADMIN_PASSWORD: weblogic1
            ADMIN_NAME: admin1
    image: node1
    container_name: node1

Voir la documentation officielle pour plus de détails.

0
Raphael