Recuerda que en la informática un error casi siempere suele tener más de una soluciones, por lo tanto aquí enseñaremos lo más óptimo y eficiente.
Solución:
Me gusta blake mitchell sais, no puedes usar ARG
en ENTRYPOINT
. Sin embargo, puede utilizar su ARG
como un valor para ENV
, de esa manera puedes usarlo con ENTRYPOINT
:
Dockerfile
ARG my_arg
ENV my_env_var=$my_arg
ENTRYPOINT echo $my_env_var
y correr:
docker build --build-arg "my_arg=foo" ...
Respuesta corta: necesitas usar ENV
Ambos ARG
y ENV
no se expanden en ENTRYPOINT
o CMD
. (https://docs.docker.com/engine/reference/builder/#environment-replacement) Sin embargo, debido a que ENV
Los correos electrónicos 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 el array forma 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
$
Estoy luchando con esto por un día, gracias a @Rotareti por mencionarlo. tiene que estar en ENV
antes de que pueda ser utilizado para el ENTRYPOINT
.
ENV variable=$from_ARG_variable
ENTRYPOINT exec your_exec_sh_file $variable
Espero que esto ayude.
Eres capaz de auxiliar nuestra publicación añadiendo un comentario y puntuándolo te lo agradecemos.