gunicorn 的双引号内的双引号的 docker CMD 数组语法

问题描述 投票:0回答:1

我正在为我的 python 应用程序使用 docker 和 Gunicorn。 我正在启动gunicorn,如下所示:

CMD ["gunicorn", "--workers 2", "--threads 2", "--bind 0.0.0.0:8000", "--preload", ""main:create_app()""]

但是由于最后一个元素(“”main:create_app()”“)而出现错误语法错误。 正如gunicorn文档中给出的,我尝试使用以下形式:

def create_app():
    app = FrameworkApp()
    ...
    return app
$ gunicorn --workers=2 'test:create_app()'

我也尝试过单引号作为“'main:create_app()'”,但这也失败了。

我缺少什么?

docker dockerfile docker-cmd
1个回答
2
投票

正确的用法是:

RUN ["gunicorn", "--workers", "2", "--threads", "2", "--bind", "0.0.0.0:8000", "--preload", "main:create_app()"]
  • 如果原始/工作 shell 命令中的两个 shell 参数之间存在未加引号的空格,则需要在 JSON 列表中将其拆分为单独的元素。这意味着
    --workers
    2
    是两个不同的字符串,而不是一个字符串
    --workers 2
    ;这同样适用于任何有参数和参数选项配对的地方。
  • 语法 shell 引号,就像
    'main:create_app()'
    周围的引号一样,是 对 shell 的指示,像
    ()
    这样的符号不应被视为 shell 语法。因为这里没有 shell,所以这些说明是不必要的。只需使用 "main:create_app()" 作为简单的 JSON 字符串,仅使用 JSON 引号;没有必要或适当的文字引号。
    
    
如果您以后对如何将简单命令转换为 JSON 字符串有疑问,可以要求
jq

为您做:


$ jq -cn --args '$ARGS.positional' -- gunicorn --workers 2 --threads 2 --bind 0.0.0.0:8000 --preload 'main:create_app()' ["gunicorn","--workers","2","--threads","2","--bind","0.0.0.0:8000","--preload","main:create_app()"]

© www.soinside.com 2019 - 2024. All rights reserved.