Tengo el siguiente archivo docker-compose
version: '3' services: node1: build: node1 image: node1 container_name: node1 node2: build: node2 image: node2 container_name: node2Puedo construir ambas imágenes e iniciarlas con un solo comando
docker-compose up -d --build
Pero me gustaría usar build-args en las compilaciones. El script de compilación original de la imagen fuera del alcance de la composición se parece a esto
#!/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 .Ambas imágenes utilizarían argumentos de compilación con el mismo nombre pero con un valor diferente. Además, como hay docenas de argumentos de compilación, sería conveniente almacenarlos en un archivo de propiedades de compilación específico del servicio de redacción. ¿Es esto posible con docker-compose?
Puede especificar los argumentos directamente en su archivo docker-compose:
node1: build: context: node1 args: ADMIN_USERNNAME: weblogic1 ADMIN_PASSWORD: weblogic1 ADMIN_NAME: admin1 image: node1 container_name: node1Vea un ejemplo completo: MWE
Los documentos oficiales tienen todos los detalles.
En su Dockerfile :
ARG CERTBOT_TAG=latest FROM certbot/certbot:${CERTBOT_TAG} En su archivo docker-compose.yml :
version: '3.4' services: certbot: build: context: . args: CERTBOT_TAG: v0.40.1Y puede construir o mejorar su servicio:
docker-compose build certbotPuede definir sus args con su comando de compilación de docker-compose.
Ejemplo de 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 $passwordarchivo docker-compose:
version: '3' services: node1: build: ./dir El ./dir contiene el Dockerfile y construyo con este comando:
docker-compose build --build-arg username="my-user" --build-arg password="my-pass"Ya veo:
Step 5/5 : RUN htpasswd -bc /etc/nginx/.htpasswd $username $password ---> Running in 80735195e35d Adding password for user my-user ---> c52c92556825Subo mi pila:
docker-compose up -dAhora puedo verificar dentro del contenedor nginx y mi nombre de usuario y contraseña (encriptada) están allí:
docker@default:~/test$ docker exec -it test_node1_1 bash root@208e4d75e2bd:/# cat /etc/nginx/.htpasswd my-user:$apr1$qg4I/5RO$KMaOPvjbnKdZH37z2WYfe1 Con este método, puede pasar argumentos de build args a su pila docker-compose .