簡體   English   中英

如何在 Dockerfile CMD 和 ENTRYPOINT 執行模式中正確轉義 [] 字符?

[英]How to properly escape [] characters in a Dockerfile CMD and ENTRYPOINT exec mode?

我有一個 Dockerfile 設置了一個 CMD 語句,類似於以下:

CMD python app.py \
    keyword1=value1 \
    keyword1.keyword1a=[/some/path/here/,/and/another/path/] \
    +keyword1.keyword1b=value3 \
    keyword2=[config.yaml] \
    keyword3=null

我想將其修改為一些組合的 ENTRYPOINT + CMD 語句,以便可以更輕松地更改腳本 arguments。 像這樣:

ENTRYPOINT ["python", "app.py"]
CMD ["keyword1=value1", \
    "keyword1.keyword1a=[/some/path/here/,/and/another/path/]", \
    "+keyword1.keyword1b=value3", \
    "keyword2=[config.yaml]", \
    "keyword3=null", \
]

但是,這不能正確解析命令,向我顯示如下消息:

/bin/sh: 1: [python,: 未找到

app.py: error: argument --cfg/-c: invalid choice: '[     "keyword1=value1"     "keyword1.keyword1a=[/some/path/here/,/and/another/path/]"     "+keyword1.keyword1b=value3"     "keyword2=[config.yaml]"     "keyword3=null"]' (choose from 'job', 'hydra', 'all')

如果我嘗試將所有 arguments 作為 exec 形式放入 ENTRYPOINT(或 CMD),我會得到一個不同的錯誤:

ENTRYPOINT ["python", "app.py", \
    "keyword1=value1", \
    "keyword1.keyword1a=[/some/path/here/,/and/another/path/]", \
    "+keyword1.keyword1b=value3", \
    "keyword2=[config.yaml]", \
    "keyword3=null", 
]
/bin/sh: 1: [python,: not found

我懷疑主要問題是系統如何考慮 [] 括號:如果我刪除包含這些的行,則該命令似乎被正確解析(但當然 python 腳本沒有按照我的意願執行)。

有沒有一個好辦法來逃避有問題的角色?

我在大衛的評論之后發現了問題:看起來我在列表中的尾隨逗號是罪魁禍首。 這有效:

ENTRYPOINT ["python", "app.py"]
CMD ["keyword1=value1", \
    "keyword1.keyword1a=[/some/path/here/,/and/another/path/]", \
    "+keyword1.keyword1b=value3", \
    "keyword2=[config.yaml]", \
    "keyword3=null"]

看起來 [] 不是問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM