Cómo pasar arguments a Shell Script a través de Docker Run

Soy nuevo en el mundo del docker. Tengo que invocar un script de shell que toma arguments de línea de command a través de un contenedor acoplable. Ejemplo: Mi script de shell se ve así:

#!bin/bash echo $1 

Dockerfile se ve así:

 FROM ubuntu:14.04 COPY ./file.sh / CMD /bin/bash file.sh 

No estoy seguro de cómo pasar los arguments mientras se ejecuta el contenedor

@ user1801934, ¿está seguro de que la respuesta de @Gilles Quenot es correcta?

pon el arg1 en Dockerfile directamente, ¿es tu petición?

Aquí está mi respuesta.

Actualizar file.sh

 #!/usr/bin/env bash echo $1 

usando el file Docker existente

Construye la image:

 docker build -t test . 

ejecuta la image con argumento abc o xyz o algo más.

 docker run -ti test /file.sh abc docker run -ti test /file.sh xyz 

Con Docker, la forma correcta de pasar este tipo de información es a través de variables de entorno.

Entonces, con el mismo Dockerfile, cambie la secuencia de commands a

 #!/bin/bash echo $FOO 

Después de build, use el siguiente command del acoplador:

 docker run -e FOO="hello world!" test 

con este script en file.sh

 #!/bin/bash echo Your container args are: "$@" 

y este Dockerfile

 FROM ubuntu:14.04 COPY ./file.sh / ENTRYPOINT ["/file.sh"] CMD [] 

deberias ser capaz de:

 % docker build -t test . % docker run test hello world Your container args are: hello world 

Lo que tengo es un file de script que realmente ejecuta cosas. Este file de scrip puede ser relativamente complicado. Vamos a llamarlo "run_container". Este script toma arguments de la línea de command:

 run_container p1 p2 p3 

Un simple run_container podría ser:

 #!/bin/bash echo "argc = ${#*}" echo "argv = ${*}" 

Lo que quiero hacer es, después de "atracar" esto, me gustaría poder iniciar este contenedor con los parameters en la command-line del acoplador de la siguiente manera:

 docker run image_name p1 p2 p3 

y hacer que el script run_container se ejecute con p1 p2 p3 como los parameters.

Esta es mi solución:

Dockerfile:

 FROM docker.io/ubuntu ADD run_container / ENTRYPOINT ["/bin/bash", "-c", "/run_container ${*}", "--"] 

Si quieres ejecutarlo @build time:

 CMD /bin/bash /file.sh arg1 

si quieres ejecutarlo @run time:

 ENTRYPOINT ["/bin/bash"] CMD ["/file.sh", "arg1"] 

Luego en el shell host

 docker build -t test . docker run -i -t test 
    Intereting Posts