2015-12-16 16 views
11

Docker 1.9 consente di passare argomenti a un file docker. Vedi link: https://docs.docker.com/engine/reference/builder/#argCome passare il valore ARG su ENTRYPOINT?

Come posso passare gli stessi arugmenti all'interno di ENTRYPOINT Istruzione ??

mio dockerfile ha

ARG $ Version = 3.1
EntryPoint /tmp/folder-$Version/sample.sh iniziare

sto ottenendo un errore durante la creazione contenitore con sopra dockerfile . Si prega di suggerire quale è il modo corretto per specificare l'argomento all'interno dell'istruzione ENTRYPOINT ??

+0

Quindi vi chiedo per l'opzione, per esempio, '--entrypoint =/root/run.sh'? – BMW

risposta

0

Dal momento che si sta utilizzando la variabile all'interno di una maggiore espressione, potrebbe beneficiare di essere circondato da parentesi graffe:

ENTRYPOINT /tmp/folder-${Version}/sample.sh start 
2

La sintassi per ARG dovrebbe omettere la $.

Invece di ARG $Version=3.1, provare ARG Version=3.1.

6

Risposta breve: è necessario utilizzare ENV

Sia ARG e ENV non vengono espansi in ENTRYPOINT o CMD. (https://docs.docker.com/engine/reference/builder/#environment-replacement) Tuttavia, poiché i valori ENV vengono inoltrati come parte dell'ambiente, sono disponibili in fase di runtime, pertanto la shell può espanderli. (Questo significa che non è possibile utilizzare il modulo matrice di ENTRYPOINT o CMD.)

Ecco un esempio:

$ cat arg/Dockerfile 
FROM debian:jessie 
ARG FOO=bar 
ENTRYPOINT echo ${FOO:-foo} 
$ sudo docker build arg 
Sending build context to Docker daemon 2.048 kB 
Step 1 : FROM debian:jessie 
---> f50f9524513f 
Step 2 : ARG FOO=bar 
---> Using cache 
---> 2cfdcb514b62 
Step 3 : ENTRYPOINT echo ${FOO:-foo} 
---> Running in 21fb9b42c10d 
---> 75e5018bad83 
Removing intermediate container 21fb9b42c10d 
Successfully built 75e5018bad83 
$ sudo docker run 75e5018bad83 
foo 
$ sudo docker run -e FOO=bas 75e5018bad83 
bas 
$ sudo docker build --build-arg FOO=bas arg 
Sending build context to Docker daemon 2.048 kB 
Step 1 : FROM debian:jessie 
---> f50f9524513f 
Step 2 : ARG FOO=bar 
---> Using cache 
---> 2cfdcb514b62 
Step 3 : ENTRYPOINT echo ${FOO:-foo} 
---> Using cache 
---> 75e5018bad83 
Successfully built 75e5018bad83 
$ sudo docker run 75e5018bad83 
foo 
$ cat env/Dockerfile 
FROM debian:jessie 
ARG FOO=bar 
ENV FOO=${FOO} 
ENTRYPOINT echo ${FOO:-foo} 
$ sudo docker build env 
Sending build context to Docker daemon 2.048 kB 
Step 1 : FROM debian:jessie 
---> f50f9524513f 
Step 2 : ARG FOO=bar 
---> Using cache 
---> 2cfdcb514b62 
Step 3 : ENV FOO ${FOO} 
---> Running in f157a07c1b3e 
---> a5e8c5b65a17 
Removing intermediate container f157a07c1b3e 
Step 4 : ENTRYPOINT echo ${FOO:-foo} 
---> Running in 66e9800ef403 
---> 249fe326e9ce 
Removing intermediate container 66e9800ef403 
Successfully built 249fe326e9ce 
$ sudo docker run 249fe326e9ce 
bar 
$ sudo docker run -e FOO=bas 249fe326e9ce 
bas 
$ sudo docker build --build-arg FOO=bas env 
Sending build context to Docker daemon 2.048 kB 
Step 1 : FROM debian:jessie 
---> f50f9524513f 
Step 2 : ARG FOO=bar 
---> Using cache 
---> 2cfdcb514b62 
Step 3 : ENV FOO ${FOO} 
---> Running in 6baf31684b9f 
---> 8f77ad154798 
Removing intermediate container 6baf31684b9f 
Step 4 : ENTRYPOINT echo ${FOO:-foo} 
---> Running in 892ac47cabed 
---> fa97da85bf8a 
Removing intermediate container 892ac47cabed 
Successfully built fa97da85bf8a 
$ sudo docker run fa97da85bf8a 
bas 
$ 
+0

Perché le variabili di ambiente sono disponibili in fase di esecuzione? Il "processo di esecuzione" è un processo secondario di quello di compilazione? –

1

Come Blake Mitchell sais, non è possibile utilizzare ARG in ENTRYPOINT. Tuttavia è possibile utilizzare il ARG come un valore per ENV, in questo modo si può utilizzare con ENTRYPOINT:

Dockerfile

ARG my_arg 
ENV my_env=$my_arg 

ENTRYPOINT echo $my_env 
Problemi correlati