docker - 通过exec将args传递到入口点的Cloud Build

标签 docker exec google-cloud-build

我有一个包含以下使用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/

相关文章:

我们可以在 fork() C 调用的进程之间切换吗,比如切换播放器

c - 为什么 more 命令不使用 stdin 来读取输入?

php - 来自 PHP exec 的 taskkill

google-cloud-build - Google Cloud Build - Github 触发器 - 过滤文件不起作用

Dockerfile:创建用户可以看到的ENV变量?

python - 如何升级 docker 中使用的默认 python 版本?

docker - 在 Google Build 执行构建期间将 Google Cloud 凭据传递到 Docker 容器?

google-cloud-platform - gcloud-错误:(gcloud.app.deploy)权限错误,正在提取应用程序

macos - 通过 Docker for Mac 从 Docker Hub 提取的镜像的位置在哪里

docker - 停止并删除正在运行的容器