tag run remove hub example compose docker dockerfile docker-compose docker-registry

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 $