it-swarm.com.de

Wie definiere ich Build-Args in Docker-Compose?

Ich habe die folgende Docker-Compose-Datei

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

    node2:
            build: node2
            image: node2
            container_name: node2

Ich kann beide Bilder erstellen und mit einem einzigen Befehl starten

docker-compose up -d --build

Aber ich möchte Build-Args für die Builds verwenden. Das ursprüngliche Erstellungsskript des Bildes außerhalb des Erstellungsbereichs sieht ungefähr so ​​aus

#!/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 .

Beide Images würden Build-Args mit demselben Namen, aber unterschiedlichem Wert verwenden. Da es Dutzende von Build-Argumenten gibt, ist es auch praktisch, sie in einer für den Compose-Service spezifischen Build-Eigenschaftendatei zu speichern. Ist das mit docker-compose möglich?

2
Tuomas Toivonen

Sie können Ihre args mit Ihrem Buildbefehl für Docker-Compose definieren. 

Beispiel 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-Compose-Datei:

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

Der ./dir enthält die Dockerfile und ich erzeuge mit diesem Befehl:

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

Ich sehe schon:

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

Ich bringe meinen Stapel hoch:

docker-compose up -d

Jetzt kann ich den nginx-Container überprüfen und meinen Benutzernamen und das (verschlüsselte) Passwort finden Sie dort:

[email protected]:~/test$ docker exec -it test_node1_1 bash
[email protected]:/# cat /etc/nginx/.htpasswd
my-user:$apr1$qg4I/5RO$KMaOPvjbnKdZH37z2WYfe1

Mit dieser Methode können Sie build args an Ihren docker-compose-Stack übergeben.

4
lvthillo

Sie können die Argumente direkt in Ihrer Docker-Compose-Datei angeben:

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

Weitere Informationen finden Sie in der offiziellen Dokumentation .

0
Raphael