Docker 运行不将参数附加到图像入口点

Ane*_*pic 14 docker

我有一个 Dockerfile:

ENTRYPOINT ["uwsgi", "--ini /home/docker/app/uwsgi_app.ini"]
Run Code Online (Sandbox Code Playgroud)

(没有CMD

当我运行时 uwsgi 正确地抱怨:

uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
Run Code Online (Sandbox Code Playgroud)

现在,我认为我可以通过docker run如下方式将参数附加到入口点:

$ docker run -itP uwsgi_app:0.1 --uid=docker
Run Code Online (Sandbox Code Playgroud)

然而 uwsgi 仍然抱怨同样的错误,似乎没有附加 arg。

如果我覆盖入口点,则添加 arg:

$ docker run -itP --entrypoint bash uwsgi_app:0.1 --uid=docker
bash: --uid=docker: invalid option
Run Code Online (Sandbox Code Playgroud)

...我想知道这是否是 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.
Run Code Online (Sandbox Code Playgroud)

(好吧,一个错误,但显示 arg 已被接受)

Ane*_*pic 27

事实证明,答案是使用ENTRYPOINT(and/or CMD)的数组形式,以便从命令行追加工作

和:

ENTRYPOINT ["uwsgi", "--ini", "/home/docker/app/uwsgi_app.ini"]
Run Code Online (Sandbox Code Playgroud)

然后:

$ docker run -itP uwsgi_app:0.2 --uid=docker
...
user docker not found.
Run Code Online (Sandbox Code Playgroud)

(好吧,一个错误,但显示 arg 已被接受)

这种行为实际上在文档中有所描述:https :
//docs.docker.com/reference/builder/#entrypoint

...虽然我在略读它们时错过了:)