docker - run - ¿Cómo pasar el valor ARG a ENTRYPOINT?
docker tag example (3)
Docker 1.9 permite pasar argumentos a un archivo docker. Vea el enlace: https://docs.docker.com/engine/reference/builder/#arg
¿Cómo puedo pasar los mismos arreglos en la instrucción ENTRYPOINT?
Mi archivo docker tiene
ARG $ Version = 3.1
ENTRYPOINT /tmp/folder-$Version/sample.sh start
Recibo un error al crear un contenedor con el archivo docker anterior. Por favor, sugiera cuál es la forma correcta de especificar el argumento dentro de la instrucción ENTRYPOINT.
Al igual que Blake Mitchell dice, no puede usar ARG
en ENTRYPOINT
. Sin embargo, puede usar su ARG
como un valor para ENV
, de esa manera puede usarlo con ENTRYPOINT
:
Dockerfile
ARG my_arg
ENV my_env=$my_arg
ENTRYPOINT echo $my_env
La sintaxis para ARG
debe omitir el $
.
En lugar de ARG $Version=3.1
, intente ARG Version=3.1
.
Respuesta corta: necesitas usar ENV
Tanto ARG
como ENV
no se expanden en ENTRYPOINT
o CMD
. ( https://docs.docker.com/engine/reference/builder/#environment-replacement ) Sin embargo, como los ENV
se pasan como parte del entorno, están disponibles en tiempo de ejecución, por lo que el shell puede expandirlos. (Esto significa que no puede usar la forma de matriz de ENTRYPOINT
o CMD
).
Aquí hay un ejemplo:
$ 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
$