Докер запускає не додаючи аргументи до точки входу зображення


13

У мене є 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 все ще скаржиться на ту ж помилку, схоже, аргумент не був доданий.

Якщо я замінюю вхідну точку, додається аргумент:

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

... Мені було цікаво, чи це --iniваріант uwsgi ігнорування інших аргументів, але це не так:

$ 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.

(добре, помилка, але показує, що аргумент прийнято)

Відповіді:


26

Виявляється, відповідь полягає у використанні форми масиву 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

... Я пропустив це, коли читав їх недбало :)


Як змінити аргумент масиву в командному рядку на докерний запуск --entrypoint ... IMAGE?
вугор ghEEz

Я не думаю, що існує форма масиву для команди run docs.docker.com/engine/reference/run/…, можливо, вам доведеться її цитувати, наприкладdocker run --entrypoint "uwsgi --ini /home/docker/app/uwsgi_app.ini" <image>
Anentropic
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.