我有一個以 node:18-alpine3.14 作為基礎鏡像的容器。我有 docker-compose 檔案
command: ["prepare_config.sh","--","npm", "run", "start-p"]
在準備配置
#!/bin/bash
json_data=$(cat <<EOF
{
"url": "$URL"
}
EOF
)
echo "$json_data";
當我嘗試運行此代碼時出現錯誤
prepare_config.sh:2
json_data=$(cat <<EOF
^^^
SyntaxError: missing ) after argument list
at Object.compileFunction (node:vm:352:18)
at wrapSafe (node:internal/modules/cjs/loader:1033:15)
at Module._compile (node:internal/modules/cjs/loader:1069:27)
at Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Module._load (node:internal/modules/cjs/loader:827:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
at node:internal/main/run_main_module:17:47
Node.js v18.1.0
你能幫忙解決這個問題嗎?
uj5u.com熱心網友回復:
快速修復(docker-compose.yml 相關)
看來您的腳本不是由 運行/bin/bash,而是由節點(影像的“入口點”)運行。
為了解決您的用例,您實際上有兩個等效的解決方案:
- “重置入口點”并直接使用您
command的問題
→添加您的docker-compose.yml服務定義:
myservice:
entrypoint: []
command: ["prepare_config.sh", "--", "npm", "run", "start-p"]
- 設定一個非空
entrypoint和command:
→ 添加你的docker-compose.yml服務定義,例如:
myservice:
entrypoint: ["prepare_config.sh", "--"]
command: ["npm", "run", "start-p"]
小備注
作為旁白:
解決方案1.承認一個等效的
docker run命令:
docker run --entrypoint="" image-name prepare_config.sh -- npm run start-p但是解決方案 2. 沒有等效
docker run命令,因為 CLI 選項--entrypoint只能采用一個引數(程式二進制檔案),而不是一個串列......
更好的修復(Dockerfile 相關)
但是,即使您的影像基于您想要覆寫node:18-alpine3.14的特定ENTRYPOINT內容,最好直接修改您自己的Dockerfile.
通常,您會在此檔案的末尾寫下:
ENTRYPOINT ["prepare_config.sh", "--"]
CMD ["npm", "run", "start-p"]
假設您已經插入了一個命令來設定入口點的可執行位,例如:
RUN chmod a x prepare_config.sh
有關ENTRYPOINTand的更多詳細資訊CMD,請參見其他 StackOverflow 答案:
Dockerfile 中的 CMD 和 ENTRYPOINT 有什么區別?.
uj5u.com熱心網友回復:
節點容器中的入口點腳本試圖確定傳遞給它的命令是否應該由節點運行。
它通過檢查第一個引數是否是系統命令來做到這一點。您的腳本不是系統命令,因此入口點腳本決定它應該由節點運行。
為了讓入口點腳本相信你的命令不應該由節點運行,你可以明確地說你希望它像這樣由 shell 運行
command: ["/bin/sh", "-c", "prepare_config.sh -- npm run start-p"]
/bin/sh 是系統命令,因此入口點腳本不會嘗試讓節點運行該命令。
另外,請注意通常沒有bash安裝 Alpine 映像,因此您可能需要bash在#!/bin/bash腳本中更改為sh或ash.
uj5u.com熱心網友回復:
現在只有這個變體可以正常作業
command: ["/bin/sh", "-c", "./prepare_config.sh && npm run start-p"]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/476677.html
