web-dev-qa-db-fra.com

Docker run n'ajoutant pas d'arguments au point d'entrée de l'image

J'ai un Dockerfile avec:

ENTRYPOINT ["uwsgi", "--ini /home/docker/app/uwsgi_app.ini"]

(pas de CMD)

Quand je cours, uwsgi se plaint à juste titre:

uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***

Maintenant, je pensais pouvoir ajouter des arguments au point d'entrée via docker run ainsi:

$ docker run -itP uwsgi_app:0.1 --uid=docker

Cependant uwsgi se plaint toujours de la même erreur, il semble que l'argument n'ait pas été ajouté.

Si je remplace le point d'entrée, l'argument est ajouté:

$ docker run -itP --entrypoint bash uwsgi_app:0.1 --uid=docker
bash: --uid=docker: invalid option

... Je me demandais si c'était le uwsgi --ini option ignorant les autres arguments, mais ce n'est pas ça:

$ docker run -itP --entrypoint bash uwsgi_app:0.1
[ root@88941de25b1f:/home/docker ]$ uwsgi --ini /home/docker/app/uwsgi_app.ini --uid=docker
user docker not found.

(ok, une erreur, mais montre que l'argument a été accepté)

13
Anentropic

Il s'avère que la réponse est d'utiliser la forme de tableau de ENTRYPOINT (et/ou CMD) pour que l'ajout de la ligne de commande fonctionne

avec:

ENTRYPOINT ["uwsgi", "--ini", "/home/docker/app/uwsgi_app.ini"]

puis:

$ docker run -itP uwsgi_app:0.2 --uid=docker
...
user docker not found.

(ok, une erreur, mais montre que l'argument a été accepté)

Ce comportement est en fait décrit dans la documentation:
https://docs.docker.com/reference/builder/#entrypoint

... j'ai raté ça quand je les ai lus :)

26
Anentropic