У меня есть Dockerfile с:
ENTRYPOINT ["uwsgi", "--ini /home/docker/app/uwsgi_app.ini"]
(нет CMD
)
Когда я бегу, uwsgi справедливо жалуется:
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
Теперь я подумал, что могу добавить аргументы к точке входа через docker run
вот так:
$ docker run -itP uwsgi_app:0.1 --uid=docker
Однако uwsgi по-прежнему жалуется на ту же ошибку, похоже, что аргумент не был добавлен.
Если я переопределю точку входа, добавится arg:
$ docker run -itP --entrypoint bash uwsgi_app:0.1 --uid=docker
bash: --uid=docker: invalid option
... Я подумал, что это был uwsgi --ini
вариант, игнорирующий другие аргументы, но это не так:
$ 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.
(хорошо, ошибка, но показывает, что аргумент принят)
Оказывается, ответ состоит в том, чтобы использовать форму массива ENTRYPOINT
(и / или CMD
) для добавления из командной строки для работы
с участием:
ENTRYPOINT ["uwsgi", "--ini", "/home/docker/app/uwsgi_app.ini"]
затем:
$ docker run -itP uwsgi_app:0.2 --uid=docker
...
user docker not found.
(хорошо, ошибка, но показывает, что аргумент принят)
Это поведение фактически описано в документации:
https://docs.docker.com/reference/builder/#entrypoint
... Я пропустил это, когда бегло читал их :)