wake-up-neo.com

Wie übergebe ich den ARG-Wert an ENTRYPOINT?

Docker 1.9 ermöglicht die Übergabe von Argumenten an eine Docker-Datei. Siehe Link: https://docs.docker.com/engine/reference/builder/#arg

Wie kann ich die gleichen Arugments in ENTRYPOINT Instruction übergeben?

Mein Dockerfile hat

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

Beim Erstellen eines Containers mit der obigen Docking-Datei wird eine Fehlermeldung angezeigt. Bitte schlagen Sie vor, wie das Argument in der ENTRYPOINT-Anweisung korrekt angegeben werden kann.

29
meallhour

Genau wie Blake Mitchell können Sie ARG nicht in ENTRYPOINT verwenden. Sie können jedoch Ihr ARG als Wert für ENV verwenden. Auf diese Weise können Sie es mit ENTRYPOINT verwenden:

Dockerfile

ARG my_arg
ENV my_env_var=$my_arg

ENTRYPOINT echo $my_env_var

und Renn:

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

Kurze Antwort: Sie müssen ENV verwenden

Sowohl ARG als auch ENV werden in ENTRYPOINT oder CMD nicht erweitert. ( https://docs.docker.com/engine/reference/builder/#environment-replacement ) Da ENVs jedoch als Teil der Umgebung übergeben werden, sind sie verfügbar zur Laufzeit, damit die Shell sie erweitern kann. (Dies bedeutet, dass Sie die Array-Form von ENTRYPOINT oder CMD nicht verwenden können.)

Hier ist ein Beispiel:

$ 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

In der Syntax für ARG sollte $ Weggelassen werden.

Versuchen Sie statt ARG $Version=3.1ARG Version=3.1.

2
tianon