Cuando ejecuto mi contenedor de docker, parece que solo respeta el primer elemento de la matriz de CMD (ejecutable de Python) y hace caso omiso de los parameters finales.
Dockerfile:
FROM ubuntu:14.04 ENTRYPOINT ["/bin/bash", "-c"] CMD ["/virtualenv/bin/python", "/mycode/myscript.py", "--param1"]
Ejecutar command:
$ docker run --rm -it --volume $(pwd)/..:/mycode --volume mycontainer-virtualenv:/virtualenv mycontainer
Salida:
Python 3.4.3 (default, Oct 14 2015, 20:28:29) [GCC 4.8.4] on linux Type "help", "copyright", "cnetworkingits" or "license" for more information. >>>
Lo mismo sucede si ejecuto --detach
lugar de -it
.
Lo mismo ocurre si ejecuto con el CMD como un parámetro de ejecución de portón anulador:
$ docker run --rm -it --volume $(pwd)/..:/mycode --volume mycontainer-virtualenv:/virtualenv mycontainer /virtualenv/bin/python /mycode/myscript.py --param1 Python 3.4.3 (default, Oct 14 2015, 20:28:29) [GCC 4.8.4] on linux Type "help", "copyright", "cnetworkingits" or "license" for more information. >>>
Si ejecuto el contenedor con bash y ejecuto el CMD desde el prompt bash, funciona bien:
$ docker run --rm -it --volume $(pwd)/..:/mycode --volume mycontainer-virtualenv:/virtualenv mycontainer bash root@d6a990e81c22:/# /virtualenv/bin/python /mycode/myscript.py --param1 Hello world!
Probablemente quieras
CMD ["/virtualenv/bin/python /mycode/myscript.py --param1"]
en lugar de
CMD ["/virtualenv/bin/python", "/mycode/myscript.py", "--param1"]
Cuando CMD
y ENTRYPOINT
están presentes en Dockerfile, CMD funciona como parameters por defecto en ENTRYPOINT. Entonces básicamente haces
bash -c "/virtualenv/bin/python" "/mycode/myscript.py" "--param1"
cuando quieres
bash -c "/virtualenv/bin/python /mycode/myscript.py --param1"
https://docs.docker.com/engine/reference/builder/#cmd https://docs.docker.com/engine/reference/builder/#entrypoint https://docs.docker.com/engine/reference/ constructor / # understand-how-cmd-and-entrypoint-interact