Implicazioni di sicurezza e mitigazione dei rischi
Sebbene gli argomenti di build offrano flessibilità, introducono anche potenziali rischi per la sicurezza che devi conoscere per mantenere sicure le tue immagini Docker.
Vettori di leakage degli argomenti
I build args non sono privati come potresti pensare. I loro valori possono fuoriuscire attraverso vari vettori che molti sviluppatori trascurano. Innanzitutto, la cronologia dell'immagine Docker espone tutti i tuoi build args: chiunque abbia accesso all'immagine può eseguire docker history per vedere i valori usati in fase di build, inclusi potenzialmente informazioni sensibili come chiavi API o token.
docker history flaskapp:dev

Immagine 4 - Docker history
Anche i layer intermedi possono perdere i build args. Anche se usi una build multi-stage e non copi il layer che contiene informazioni sensibili, i valori dei build args restano nella cache dei layer sulla macchina di build. Ciò significa che chiunque abbia accesso al demone Docker sul tuo server di build potrebbe potenzialmente estrarre queste informazioni.
I log di CI/CD rappresentano un altro rischio significativo. La maggior parte dei sistemi CI/CD registra l'intero comando di build, inclusi eventuali build args passati sulla riga di comando.
Ad esempio, questo comando completo, incluso API_KEY, sarà visibile nei log di CI/CD:
docker build --build-arg API_KEY=secret123 -t myapp:latest .
Questi log sono spesso accessibili a un gruppo ampio di sviluppatori o persino archiviati in sistemi di terze parti, aumentando la superficie di esposizione di valori sensibili.
Alternative sicure
Per informazioni sensibili, dovresti usare la funzionalità dei secret di Docker BuildKit al posto dei build args. BuildKit ti consente di montare segreti durante il processo di build senza persisterli nell'immagine finale o nella cronologia.
Ecco un esempio di Dockerfile che usa i secret di Docker BuildKit:
FROM python:3.13-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
# Use secret mount instead of build arg
RUN --mount=type=secret,id=api_key \
cat /run/secrets/api_key > api_key.txt
EXPOSE 5000
CMD ["python", "app.py"]
Per costruire questa immagine con un secret, crea prima il file api_key.txt:
echo "my-secret-api-key" > api_key.txt
Poi costruisci l'immagine con il secret:
DOCKER_BUILDKIT=1 docker build \
--secret id=api_key,src=api_key.txt \
-t flaskapp:secure .

Immagine 5 - Costruire immagini con i secret di BuildKit
Per configurazioni che devono essere disponibili in runtime, le variabili d'ambiente restano l'approccio preferito. Possono essere impostate all'avvio del container senza essere incorporate nell'immagine:
# Set environment variables at runtime
docker run -e API_KEY=secret123 -p 5000:5000 flaskapp:latest
Per gestire in modo sicuro configurazioni sensibili in produzione, valuta l'uso di piattaforme di orchestrazione come Kubernetes, che offrono metodi sicuri come i Secret per gestire informazioni riservate. Anche Docker Swarm offre funzionalità simili con la gestione dei secret.
> Docker non è l'unica piattaforma di containerizzazione. Leggi di Podman per scoprire quale strumento fa più al caso tuo.
Ricorda, la regola pratica è: usa i build args per configurazioni di build non sensibili, usa i secret di BuildKit per esigenze sensibili in build-time, e usa variabili d'ambiente o i secret della piattaforma di orchestrazione per la configurazione in runtime.
Integrazione con gli ecosistemi di container
Tolte di mezzo le basi, vediamo come sfruttare i build args all'interno di ecosistemi Docker più ampi e strumenti di build moderni.
Docker Compose
Docker Compose rende semplice definire e condividere i build args tra le tue applicazioni multi-container.
Se vuoi seguire passo passo, ecco una struttura di progetto completa per due semplici servizi Flask:
flask-project/
├── docker-compose.yml # Main compose configuration
├── .env # Environment variables for compose
├── web/
│ ├── Dockerfile # Web service Dockerfile
│ ├── app.py # Flask application
│ └── requirements.txt # Python dependencies
├── api/
│ ├── Dockerfile # API service Dockerfile
│ ├── app.py # API Flask application
│ └── requirements.txt # API dependencies
Passo velocemente sui contenuti dei file, uno per uno:
web/app.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def index():
return render_template("index.html", title="Flask Web App")
@app.route("/about")
def about():
return "About page - Web Service"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
web/requirements.txt
flask==3.1.0
web/Dockerfile
# Web service Dockerfile
ARG PYTHON_VERSION=3.13
FROM python:${PYTHON_VERSION}-slim
# Redeclare the build arg to use it after FROM
ARG PYTHON_VERSION
ARG ENVIRONMENT=production
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV FLASK_ENV=${ENVIRONMENT}
WORKDIR /app
# Copy and install requirements
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy application code
COPY . .
# Create a simple template folder and file if not exists
RUN mkdir -p templates && \
echo "<html><body><h1>Hello from Web Service</h1><p>Python version: ${PYTHON_VERSION}</p><p>Environment: ${ENVIRONMENT}</p></body></html>" > templates/index.html
EXPOSE 5000
CMD ["python", "app.py"]
api/app.py
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/api/health")
def health():
return jsonify({"status": "healthy"})
@app.route("/api/data")
def get_data():
return jsonify(
{"message": "Hello from the API service", "items": ["item1", "item2", "item3"]}
)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000, debug=True)
api/requirements.txt
flask==3.1.0
api/Dockerfile
ARG PYTHON_VERSION=3.13
FROM python:${PYTHON_VERSION}-slim
# Redeclare the build arg to use it after FROM
ARG PYTHON_VERSION
ARG ENVIRONMENT=production
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV FLASK_ENV=${ENVIRONMENT}
WORKDIR /app
# Copy and install requirements
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy application code
COPY . .
# Add metadata label based on build args
LABEL python.version="${PYTHON_VERSION}" \
app.environment="${ENVIRONMENT}"
EXPOSE 8000
CMD ["python", "app.py"]
.env
PYTHON_VERSION=3.10
ENVIRONMENT=development
docker-compose.yml
services:
web:
build:
context: ./web
dockerfile: Dockerfile
args:
PYTHON_VERSION: ${PYTHON_VERSION:-3.13}
ENVIRONMENT: ${ENVIRONMENT:-development}
ports:
- "5000:5000"
depends_on:
- api
api:
build:
context: ./api
dockerfile: Dockerfile
args:
PYTHON_VERSION: ${PYTHON_VERSION:-3.13}
ENVIRONMENT: ${ENVIRONMENT:-production}
ports:
- "8000:8000"
In poche parole, è un modo davvero semplice per avviare due applicazioni in ambienti isolati, entrambe contemporaneamente, entrambe con un set specifico di build args.
Puoi usare questo comando per eseguire il setup multi-container:
docker compose up --build

Immagine 6 - Build args con Docker Compose
Dopo qualche secondo vedrai entrambi i servizi in esecuzione:

Immagine 7 - Build args con Docker Compose (2)
È un setup piuttosto verboso per applicazioni semplici come queste due, ma il succo è chiaro: gli argomenti di build sono impostati nel file compose e referenziati nei singoli Dockerfile.
A margine, puoi anche passare valori di variabili dal tuo ambiente ai build args, cosa utile nelle pipeline CI/CD:
services:
web:
build:
context: .
args:
- PYTHON_VERSION=${PYTHON_VERSION:-3.10}
E per sovrascrivere questi valori quando esegui docker-compose, puoi usare le variabili d'ambiente:
PYTHON_VERSION=3.10 docker-compose up --build
Questo approccio ti permette di mantenere build coerenti in tutto il team offrendo comunque flessibilità quando necessario.
Funzionalità di BuildKit
BuildKit, il motore di build moderno di Docker, potenzia il processo di build con funzionalità che rendono l'uso dei build args ancora più efficace. Quando abiliti BuildKit (impostando DOCKER_BUILDKIT=1), sblocchi un paio di nuove capacità.
L'inline cache migliora le prestazioni sfruttando la cache di build dell'immagine remota. Puoi specificare un'immagine sorgente da usare come cache con il flag --cache-from, e BuildKit utilizzerà in modo intelligente i layer di quell'immagine:
DOCKER_BUILDKIT=1 docker build \
--build-arg PYTHON_VERSION=3.10 \
--cache-from flaskapp:dev \
-t flaskapp:latest .
Un'altra funzionalità preziosa di BuildKit sono gli output deterministici, che garantiscono build riproducibili. È fondamentale quando vuoi esattamente la stessa immagine a prescindere da quando o dove venga costruita:
# Build with deterministic output
DOCKER_BUILDKIT=1 docker build \
--build-arg PYTHON_VERSION=3.10 \
--build-arg BUILD_DATE=2025-05-01 \
--output type=docker,name=flaskapp:stable \
.
L'offuscamento dei secret nei log di BuildKit protegge le informazioni sensibili durante le build.
A differenza dei normali build args, che compaiono nei log di build, BuildKit nasconde automaticamente i valori dei secret:
# Create a file with the API key
echo "my-api-key-value" > ./api-key.txt
# Build with secret (value won't appear in logs)
DOCKER_BUILDKIT=1 docker build \
--secret id=api_key,src=./api-key.txt \
-t flaskapp:secure .
Nel Dockerfile, accederesti a questo secret con:
RUN --mount=type=secret,id=api_key \
cat /run/secrets/api_key > /app/config/api_key.txt
Queste funzionalità di BuildKit lavorano insieme ai build args per creare un sistema di build più sicuro, efficiente e riproducibile, in grado di adattarsi a praticamente qualsiasi workflow di containerizzazione.
Best practice per l'adozione in azienda
Implementare i build args di Docker in team numerosi richiede approcci standardizzati, almeno se vuoi minimizzare la confusione e massimizzare i benefici in termini di sicurezza e prestazioni.
Quando adotti i build args in ambienti enterprise, parti da una corretta validazione degli argomenti.
Fornisci sempre valori predefiniti sensati per ogni argomento di build, così le build non falliscono inaspettatamente quando gli argomenti non vengono passati. Dovresti anche aggiungere controlli di validazione nel Dockerfile per verificare che i build args critici soddisfino i requisiti.
Ecco un esempio che valida la versione di Python:
ARG PYTHON_VERSION=3.9
# Validate Python version
RUN if [[ ! "$PYTHON_VERSION" =~ ^3\.[0-9]+$ ]]; then \
echo "Invalid Python version: ${PYTHON_VERSION}. Must be 3.x"; \
exit 1; \
fi
L'ottimizzazione della cache dei layer è cruciale per ridurre i tempi di build nelle pipeline CI/CD.
Ordina le istruzioni del Dockerfile per massimizzare i cache hit, mettendo i contenuti che cambiano raramente (come l'installazione delle dipendenze) prima di quelli che cambiano spesso (come il codice applicativo).
Quando usi build args che potrebbero cambiare spesso, posizionali dopo le operazioni stabili per evitare di invalidare l'intera cache:
FROM python:3.13-slim
WORKDIR /app
# Dependencies change less frequently - good cache utilization
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Build args that might change often come AFTER stable operations
ARG BUILD_NUMBER
ARG COMMIT_SHA
# Now these args won't invalidate the dependency cache
La gestione dei metadati tramite build args migliora la tracciabilità e la conformità. Usa i build args per iniettare metadati di build come label:
ARG BUILD_DATE
ARG VERSION
ARG COMMIT_SHA
ARG BUILD_URL
LABEL org.opencontainers.image.created="${BUILD_DATE}" Can you please provide me with access to this document?
org.opencontainers.image.version="${VERSION}" \
org.opencontainers.image.revision="${COMMIT_SHA}" \
org.opencontainers.image.url="${BUILD_URL}"
Queste label standard seguono la specifica Open Container Initiative (OCI), quindi le tue immagini saranno compatibili con diversi strumenti di gestione dei container.
La documentazione è spesso trascurata, ma è fondamentale per l'adozione a livello enterprise.
Crea una chiara sezione README che documenti tutti i build args disponibili, il loro scopo, i valori predefiniti e gli esempi d'uso. Indica quali build args sono obbligatori e quali facoltativi, e documenta eventuali interazioni tra argomenti diversi. Valuta di aggiungere queste informazioni anche nei file di configurazione della pipeline CI/CD come commenti, per aiutare gli sviluppatori a capire quali valori devono fornire:
# Example documented CI configuration
build_job:
script:
# BUILD_NUMBER: Unique identifier for this build (required)
# ENVIRONMENT: Target deployment environment [dev|staging|prod] (required)
# PYTHON_VERSION: Python version to use (optional, default: 3.9)
- docker build
--build-arg BUILD_NUMBER=${CI_PIPELINE_ID}
--build-arg ENVIRONMENT=${DEPLOY_ENV}
--build-arg PYTHON_VERSION=${PYTHON_VERSION:-3.9}
-t myapp:${CI_PIPELINE_ID} .
Per un'adozione davvero enterprise, valuta l'implementazione di uno schema degli argomenti di build che possa essere versionato e validato. Questo approccio ti consente di evolvere la configurazione di build nel tempo mantenendo la compatibilità all'indietro.
Analisi comparativa: Build Args vs. Variabili d'ambiente
Se vuoi creare immagini Docker sicure e flessibili che seguano le best practice, devi capire quando usare i build arguments e quando usare le variabili d'ambiente.
Ecco una tabella di riferimento rapido:
|
Funzionalità |
Build arguments |
Variabili d'ambiente |
|
Disponibilità |
Disponibili solo durante la build dell'immagine |
Disponibili sia in build che in runtime del container |
|
Persistenza |
Non persistono nell'immagine finale (a meno che non siano convertiti esplicitamente in |
Persistono nell'immagine e sono disponibili ai container in esecuzione |
|
Sicurezza |
Visibili nella cronologia dell'immagine con docker history |
Non visibili nella cronologia dell'immagine ma accessibili ai processi dentro il container |
|
Utilizzo |
Ideali per configurazioni di build-time come versioni, percorsi di build, flag del compilatore |
Ideali per configurazioni di runtime come stringhe di connessione, feature flag, livelli di log |
|
Dichiarazione |
Definiti con l'istruzione |
Definiti con l'istruzione |
|
Valori predefiniti |
Possono avere valori di default: |
Possono avere valori di default: |
|
Ambito |
Limitati a ciascuna fase di build, vanno ridefiniti dopo ogni |
Disponibili in tutte le fasi di build e ereditati dalle immagini figlie |
|
Metodo di override |
|
|
La differenza chiave sta nel momento e nello scopo. I build args configurano il processo di build, mentre le variabili d'ambiente configurano l'applicazione in esecuzione. Ad esempio, useresti un build arg per scegliere quale immagine di base usare (ARG PYTHON_VERSION=3.10), ma useresti una variabile d'ambiente per dire alla tua applicazione su quale porta ascoltare (ENV PORT=8080).
Dal punto di vista della sicurezza, i build args sono più rischiosi per informazioni sensibili perché restano nella cronologia dell'immagine.
Considera questo workflow per gestire diversi tipi di configurazione:
# Build-time configuration (non-sensitive)
ARG PYTHON_VERSION=3.13
FROM python:${PYTHON_VERSION}-slim
# Build-time secrets (use BuildKit secrets)
RUN --mount=type=secret,id=build_key \
cat /run/secrets/build_key > /tmp/key && \
# Use the secret for build operations
rm /tmp/key
# Runtime configuration (non-sensitive)
ENV LOG_LEVEL=info
# Runtime secrets (should be injected at runtime, not here)
# This would be provided at runtime with:
# docker run -e API_KEY=secret123 myimage
In pratica, un pattern comune è convertire alcuni build args in variabili d'ambiente quando devono essere disponibili in runtime:
ARG APP_VERSION=1.0.0
# Make the version available at runtime
ENV APP_VERSION=${APP_VERSION}
Per applicazioni enterprise, questa separazione permette a team diversi di gestire aspetti diversi del ciclo di vita dell'applicazione. I team DevOps possono modificare i build args per la costruzione delle immagini, mentre gli operatori possono regolare le variabili d'ambiente in fase di deploy senza ricostruire le immagini.
Riepilogo sui Docker Build Args
I build args di Docker non sono solo un'altra funzionalità tecnica: sono il tuo strumento di riferimento per creare immagini che funzionano in modo coerente nel tuo team e nei vari ambienti.
Ti ho mostrato come usarli in semplici progetti Python, mantenendo al contempo al sicuro le informazioni sensibili. Hai visto anche come integrare i build args con strumenti come Docker Compose.
Pensa ai build args come alle fondamenta di una strategia di containerizzazione flessibile. Inizia in piccolo parametrizzando la versione di Python nel tuo prossimo progetto. Quando ti sentirai a tuo agio, prova ad aggiungere logica condizionale per diversi ambienti. In breve tempo, creerai build multi-stage sofisticate che il tuo team potrà personalizzare senza modificare il Dockerfile.
Pronto a fare un passo avanti? Questi corsi di DataCamp sono il prossimo passo ideale:
FAQ
Che cosa sono i Docker build arguments?
Gli argomenti di build di Docker (build args) sono variabili che passi al processo di build di Docker e che sono disponibili solo durante la costruzione dell'immagine. Ti consentono di personalizzare il Dockerfile senza modificarlo, rendendo le build dei container più flessibili e riutilizzabili. Pensali come parametri che puoi regolare ogni volta che crei un'immagine, perfetti per gestire ambienti o configurazioni diverse.
In cosa differiscono i build args dalle variabili d'ambiente in Docker?
I build args esistono solo durante la costruzione dell'immagine, mentre le variabili d'ambiente persistono nel container in esecuzione. I build args sono definiti con l'istruzione ARG e passati tramite il flag --build-arg in fase di build, rendendoli ideali per cose come la selezione dell'immagine di base o l'impostazione di configurazioni di build-time. Le variabili d'ambiente, definite con ENV, sono pensate per la configurazione di runtime di cui la tua applicazione ha bisogno mentre è in esecuzione.
Quali aspetti di sicurezza devo considerare quando uso i Docker build args?
I build args non sono privati come molti sviluppatori pensano: i loro valori sono visibili nella cronologia dell'immagine e nei log di CI/CD. Non usare mai i build args per informazioni sensibili come chiavi API o password, perché chiunque abbia accesso all'immagine può vedere questi valori. Per i dati sensibili, usa invece i secret di Docker BuildKit, che non persistono nell'immagine finale o nella cronologia.
Come posso passare i build args tramite pipeline CI/CD come GitHub Actions?
La maggior parte delle piattaforme CI/CD supporta i build args di Docker tramite i file di configurazione. In GitHub Actions, puoi passare i build args nel workflow YAML usando il parametro build-args sotto docker/build-push-action. Puoi fare riferimento a variabili d'ambiente, secret del repository o valori hardcoded a seconda delle tue esigenze di sicurezza. Questo consente di automatizzare build con configurazioni diverse in base al branch, all'ambiente o ad altre variabili di CI.
C'è un limite al numero di build args che posso usare in un Dockerfile?
Non c'è un limite tecnico rigido al numero di build args, ma averne troppi può rendere il Dockerfile difficile da comprendere e mantenere. Per i progetti di data science, concentrati sul parametrizzare variabili critiche come la versione di Python, le scelte dei framework o le configurazioni dei dataset. Se ti ritrovi con più di 8-10 build args, valuta di suddividere il Dockerfile in file più piccoli e mirati o di usare Docker Compose per gestire la complessità.



Hai difficoltà con build Docker incoerenti nel tuo team di sviluppo? Gli argomenti di build potrebbero essere ciò che stai cercando. Sono una soluzione ideale per creare immagini Docker flessibili e standardizzate. Ti permettono di iniettare valori nel processo di build senza hardcodificarli, rendendo i tuoi Dockerfile più portabili e facili da mantenere.
I build args di Docker risolvono problemi comuni, come la gestione di diverse immagini di base, versioni di pacchetti o impostazioni di configurazione tra ambienti.
La documentazione ufficiale di Docker consiglia i build args per parametrizzare le build invece di usare in modo improprio le variabili d'ambiente. Sono particolarmente utili nelle pipeline CI/CD, dove serve creare immagini con configurazioni diverse partendo dallo stesso Dockerfile.
> Nuovo al mondo di Docker e dei containers? Segui la nostra guida per partire subito.
In questo articolo ti mostro come usare gli argomenti di build di Docker per creare workflow di containerizzazione più efficienti, sicuri e flessibili.
Introduzione ai Docker Build Args
Gli argomenti di build (o build args) sono variabili che tu passi a Docker in fase di build, e sono disponibili solo durante la costruzione dell'immagine.
A differenza delle variabili d'ambiente, che persistono nel container in runtime, i build args esistono solo nel contesto del comando
docker builde scompaiono una volta creata l'immagine. Funzionano in modo simile ai parametri di funzione, permettendoti di iniettare valori diversi ogni volta che costruisci un'immagine.I casi d'uso principali dei build args ruotano attorno alla creazione di Dockerfile flessibili e riutilizzabili.
Puoi usare i build args per specificare immagini di base differenti (come passare da Alpine a Debian), impostare versioni dell'applicazione senza modificare il Dockerfile o configurare impostazioni di build come proxy o URL dei repository. Questa flessibilità torna molto utile nelle pipeline CI/CD in cui potresti costruire lo stesso Dockerfile con parametri diversi in base al target di deploy.
I build args danno il meglio quando devi personalizzare le build senza mantenere varianti multiple del Dockerfile. Ti aiutano a seguire il principio DRY (Don't Repeat Yourself) centralizzando la logica di configurazione del container e consentendo al tempo stesso la personalizzazione.
Sono perfetti anche per gestire le differenze tra ambienti di sviluppo, test e produzione che dovrebbero influenzare solo come viene costruita l'immagine, non come gira il container.
Ora che sai cosa sono i build args, vediamo come usarli.
Definire e utilizzare gli argomenti di build
Passiamo alla pratica su come implementare i build arguments. Si presume che tu abbia Docker installato e configurato.
Sintassi di base e ambito
Puoi dichiarare i build arguments nel Dockerfile usando l'istruzione
ARG, che può apparire prima o dopo l'istruzioneFROM, a seconda di quando ti serve usarli. Ecco la sintassi di base:Puoi fornire i valori quando costruisci l'immagine usando il flag
--build-arg:Immagine 1 - Build args di base in Docker
L'ambito dei build args segue regole specifiche importanti da capire. Gli argomenti dichiarati prima dell'istruzione
FROMsono disponibili solo prima diFROMe devono essere ridefiniti dopo se ti servono più avanti.Questo succede perché ogni istruzione
FROMavvia una nuova fase di build con il proprio ambito. Questo comportamento è fondamentale da ricordare, soprattutto nelle build multi-stage.Tecniche avanzate di dichiarazione
Creiamo un'applicazione Flask "Hello World" completa che usa i build args per supportare configurazioni diverse:
> Scopri come containerizzare un'applicazione con Docker.
Per prima cosa, crea una semplice app Flask (
app.py):Già che ci sei, crea anche un file
requirements.txt:Ora creiamo un Dockerfile che usa i build args per una configurazione flessibile:
> Il Dockerfile sopra ti sembra complicato? Impara Docker da zero con la nostra guida.
Per costruire questa immagine per lo sviluppo con una versione specifica di Python, esegui dal Terminale:
Immagine 2 - Build args in un'applicazione Python di base
Nelle build multi-stage, i build args richiedono un trattamento speciale. Ecco un esempio completo che mostra come passare argomenti tra più fasi con la nostra app Flask:
Ora puoi costruirla con una versione specifica di Python e ambiente:
Immagine 3 - Build args nelle build multi-stage
In breve, questo approccio ti permette di mantenere una configurazione coerente in tutte le fasi della build.
Argomenti di build predefiniti
Docker fornisce diversi build args predefiniti che puoi usare senza dichiararli prima. Sono:
HTTP_PROXYeHTTPS_PROXY: utili per build in ambienti aziendali con server proxy.FTP_PROXY: simile agli HTTP proxy ma per connessioni FTP.NO_PROXY: specifica gli host che devono bypassare il proxy.BUILD_DATEeVCS_REF: spesso usati per metadati e versionamento delle immagini.Questi argomenti predefiniti sono utili quando costruisci immagini in ambienti con configurazioni di rete specifiche. Ad esempio, in una rete aziendale con requisiti di proxy rigidi, puoi usare:
Questo approccio mantiene il tuo Dockerfile portabile pur funzionando in ambienti con restrizioni.