Cloud Build 使用 exec 将 args 传递到入口点
Cloud Build passing args to an entrypoint with exec
我有一个 Dockerfile,其中包含以下使用 exec 的 ENTRYPOINT
命令。
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 之类的操作。)
我有一个 Dockerfile,其中包含以下使用 exec 的 ENTRYPOINT
命令。
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 之类的操作。)