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é)
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 :)