首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在dockerfile中传递运行时参数?

如何在dockerfile中传递运行时参数?
EN

Stack Overflow用户
提问于 2018-07-27 15:31:24
回答 3查看 2.4K关注 0票数 0

我正在尝试修改django项目,以便使用我使用的shell中的gunicorn运行该项目:

代码语言:javascript
复制
gunicorn --bind :8000 --workers $(( 2 * `cat /proc/cpuinfo | grep 'core id' | wc -l` + 1 )) MyQ.wsgi:application

它的工作原理很好,它的想法是利用尽可能多的核心,就像我在文中定义的那样。

$(2* cat /proc/cpuinfo | grep 'core id' | wc -l +1)部分只返回2*n+1,其中n是系统中的核心数量。

但是,我在将这个命令重写为Dockerfile时遇到了一些困难,下面是我当前的尝试:

代码语言:javascript
复制
CMD ["gunicorn", "--bind :8000", "--workers", "$(( 2 * `cat /proc/cpuinfo | grep 'core id' | wc -l` + 1 ))", "MyQ.wsgi:application"]

当我运行docker运行时,这会导致以下错误崩溃:

代码语言:javascript
复制
gunicorn: error: argument -w/--workers: invalid int value: "$(( 2 * `cat /proc/cpuinfo | grep 'core id' | wc -l` + 1 ))"

所以基本上“$.”没有被评估,我也不知道怎么解决。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-27 15:46:01

我认为最好在ENV指令中定义一个Dockerfile环境变量,并在CMD指令中使用它。通过这种方式,您可以在从Container创建Docker Image时设置环境变量。

在你的Dockerfile中,像这样的环境变量

代码语言:javascript
复制
ENV WORKERS 1

然后将您的CMD指令更改为:

代码语言:javascript
复制
CMD ["sh", "-c", "gunicorn --bind :8000 --workers $WORKERS MyQ.wsgi:application"]

最后,在创建Container时,使用-e参数传递您的WORKERS环境变量。

票数 2
EN

Stack Overflow用户

发布于 2018-07-27 15:56:43

CMD (以及ENTRYPOINTRUN)命令有两种形式。您所写的表格是首选:

代码语言:javascript
复制
CMD ["command_name", "--option", "value"]

但是,它不运行shell来预处理命令行。所以如果你跑,比如说,

代码语言:javascript
复制
CMD ["ls", ">", "/host/directory/foo.ls"]

它将把>作为参数传递给程序,而不是执行shell重定向。

因此,要使构造工作,需要使用另一种形式,即将其隐式包装在shell执行(/bin/sh -c '...')中。

代码语言:javascript
复制
CMD gunicorn --bind :8000 ...

实际上,尝试通过Dockerfile强制执行像worker count这样的运行时约束并不是您想要的;您应该允许在docker run命令或类似命令中指定类似的内容。@HassanMusavi的答案更好。

票数 1
EN

Stack Overflow用户

发布于 2018-07-27 15:57:43

Dockerfile不支持运行时参数(在运行docker文件时要计算这些参数)。但在您的示例中,您可以编写一个脚本“test.sh”,其中有带有参数的gunicorn条目。

CMD中,像CMD["test.sh"]一样定义脚本路径。因此,当您从这个映像创建一个容器时,它将在容器中运行您的脚本,并在运行时计算$表达式并获取核心(尽管cat /proc/cpuinfo将在您的容器中运行,但它将列出您的对接机器的核心)。这样,您就不必依赖于计算核心并将其作为-e传递。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51561186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档