Dockerfile, docker-compose et l'instruction ARG

Pour le repository que j'ai créé pour gérer PrestaShop en mode dev, j'ai souhaité ajouter des arguments dans le docker-compose.yml pour les envoyer dans le Dockerfile afin de pouvoir gérer les versions de PHP et nodeJS.

Ainsi, j'utilisais l'instruction args dans mon docker-compose.yml:

version: "3"

services:
    web:
        container_name: ${PROJECT_NAME}_web
        build:
            context: ./conf
            args:
                PHP_VERSION: 7.3
                NODEJS_VERSION: 10
        ports:
            - "80:80"
        volumes:
            - ./www:/app:delegated
        links:
            - db:db

Et je récupérais les arguments dans le Dockerfile:

ARG PHP_VERSION
ARG NODEJS_VERSION

FROM php:${PHP_VERSION}-apache

RUN curl -sL https://deb.nodesource.com/setup_$NODEJS_VERSION.x | bash - && apt-get install -y nodejs

Cependant.. l'argument NODEJS_VERSION ne me renvoyait aucune valeur.. car il y a une notion de scope sur la gestion du ARG par rapport au FROM dans le Dockerfile. Tous les ARG déclaré avant le FROM ne seront plus accessibles après l'instruction lors du build.

Voici comment je devais écrire mon Dockerfile pour gérer ce cas :

ARG PHP_VERSION
FROM php:${PHP_VERSION}-apache

ARG NODEJS_VERSION

RUN curl -sL https://deb.nodesource.com/setup_$NODEJS_VERSION.x | bash - && apt-get install -y nodejs

Pour plus d'informations: https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact



in Docker Posté le sept. 28, 2021