web-dev-qa-db-fra.com

Comment passer la valeur ARG à ENTRYPOINT?

Docker 1.9 permet de passer des arguments à un dockerfile. Voir le lien: https://docs.docker.com/engine/reference/builder/#arg

Comment puis-je passer les mêmes arugments dans l'instruction ENTRYPOINT ??

Mon dockerfile a

Version ARG $ = 3.1
ENTRYPOINT /tmp/folder-$Version/sample.sh start

Je reçois une erreur lors de la création du conteneur avec le fichier docker ci-dessus. Veuillez suggérer quelle est la bonne façon de spécifier l'argument dans l'instruction ENTRYPOINT ??

29
meallhour

Comme Blake Mitchell sais, vous ne pouvez pas utiliser ARG dans ENTRYPOINT. Cependant, vous pouvez utiliser votre ARG comme valeur pour ENV, de cette façon vous pouvez l'utiliser avec ENTRYPOINT:

Dockerfile

ARG my_arg
ENV my_env_var=$my_arg

ENTRYPOINT echo $my_env_var

et courir:

docker build --build-arg "my_arg=foo" ...
30
Rotareti

Réponse courte: vous devez utiliser ENV

ARG et ENV ne sont pas développés dans ENTRYPOINT ou CMD. ( https://docs.docker.com/engine/reference/builder/#environment-replacement ) Cependant, comme ENVs sont transmis dans le cadre de l'environnement, ils sont disponibles au moment de l'exécution, afin que le shell puisse les développer. (Cela signifie que vous ne pouvez pas utiliser la forme de tableau de ENTRYPOINT ou CMD.)

Voici un exemple:

$ 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
$
18
Blake Mitchell

La syntaxe de ARG doit omettre le $.

Au lieu de ARG $Version=3.1, essayez ARG Version=3.1.

2
tianon