我有一个包含以下使用exec的ENTRYPOINT
命令的Dockerfile。
FROM node:10-alpine
RUN apk add ca-certificates
RUN npm install -g firebase-tools
COPY --from=gcr.io/berglas/berglas:latest /bin/berglas /bin/berglas
ENV FIREBASE_TOKEN ""
ENTRYPOINT exec /bin/berglas exec -- /usr/local/bin/firebase
在cloudbuild.yaml
中,我执行以下步骤,但不遵守args: []
中传递的参数。 - name: firebase-tools
dir: '/workspace/functions'
args: ['deploy', '-P', '${_FIREBASE_PROJECT_NAME}']
env:
- 'FIREBASE_TOKEN=sm://$PROJECT_ID/firebase-ci-token'
因为exec
更改了 shell ,所以它将忽略原始的args: []
。是否可以将这些args: []
应用于/usr/local/bin/firebase deploy
命令?
最佳答案
您的实际问题是您正在使用ENTRYPOINT
中的字符串。这会将命令字符串包装在sh -c '...'
中,它将忽略作为命令部分传递的任何其他参数。 ENTRYPOINT
必须使用JSON-array语法在CMD
中采用其他参数。
ENTRYPOINT ["/bin/berglas", "exec", "--", "/usr/local/bin/firebase"]
由于此表单没有 shell 程序包装程序(它仅直接运行命令),因此此处不需要外部exec
。(我会考虑重新安排它,以便您拥有
CMD ["firebase"]
,并且ENTRYPOINT
行以--
分隔符结尾。然后CMD
是一个完整的命令,您可以轻松地执行一些操作,例如在环境包装器中运行调试shell。)
关于docker - 通过exec将args传递到入口点的Cloud Build,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63508362/