Назад | Перейти на главную страницу

Docker run не добавляет аргументы к точке входа изображения

У меня есть 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

... Я пропустил это, когда бегло читал их :)