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 之类的操作。)