我有一个 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
... 我想知道这是否是 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.
(好的,一个错误,但是显示参数已被接受)
答案1
ENTRYPOINT
事实证明,答案是使用(and/or )的数组形式,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
...不过我在浏览的时候错过了这一点 :)