【问题标题】:Invalid ENTRYPOINT when deploying Docker image inside Google Cloud在 Google Cloud 中部署 Docker 映像时 ENTRYPOINT 无效
【发布时间】:2020-08-13 04:38:38
【问题描述】:

当我从 gcloud-cli 运行“gcloud builds submit --config cloudbuild.yaml”时出现此错误。

Step #1: Deploying...
Step #1: Setting IAM Policy.....................................done
Step #1: Creating Revision.....................................................failed
Step #1: Deployment failed
Step #1: ERROR: (gcloud.run.deploy) Cloud Run error: Invalid argument error. Invalid ENTRYPOINT. [name: "gcr.io/customerapi-275705/quickstart-image@sha256:0d1965181fa4c2811c3fcbd63d68de5b4c348ee5b62615594946dea48fee9735"
Step #1: error: "Command \"/quickstart.sh\": invalid mode \"-rw-rw-rw-\" for /quickstart.sh"
Step #1: ].
Finished Step #1

该文件应该具有由 chmod 设置的“+x”(读取/执行)权限。 Windows 等效项是 '/grant User:F'。

第 1 步:错误:“命令\”/quickstart.sh\”:/quickstart.sh 的无效模式\“-rw-rw-rw-\”

-rw-rw-rw 对我来说似乎是正确的。我错过了什么?

这是在我的 Dockerfile 中

FROM alpine
COPY quickstart.sh /
CMD ["\/quickstart.sh"]

这是我的 cloudbuild.yaml

steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/quickstart-image', '.' ]

    - name: 'gcr.io/cloud-builders/gcloud'
      args:
      - 'run'
      - 'deploy'
      - 'myservice'
      - '--image'
      - 'gcr.io/$PROJECT_ID/quickstart-image'
      - '--region'
      - 'europe-north1'
      - '--platform'
      - 'managed'
      - '--allow-unauthenticated'
images: 
     - 'gcr.io/$PROJECT_ID/quickstart-image'

【问题讨论】:

  • 您是否尝试过使用 icalcs 或 CALCS 获取权限,以便获得所有权?
  • @StefanNeacsu 是的,我使用了“icacls /grant Everyone:F”,结果是 -rw-rw-rw (777)。
  • 再次查看错误后,我认为它似乎认为文件名是不是这种情况的模式,因此通过更改为正确的模式可以解决问题。
  • 你能解决这个问题吗?我也面临同样的问题。
  • @Morfinismo 不。我最终删除了 Dockerfile 并直接部署到 AppEngine。

标签: docker google-cloud-platform google-cloud-build


【解决方案1】:

几个小时前我遇到了同样的问题,我通过在Dockerfile结尾添加一个执行表单 ENTRYPOINT 来解决它。 p>

我尝试了shell形式 ENTRYPOINT,但还是不行,大概是因为以下原因:

shell 形式阻止使用任何CMDrun 命令行参数,但缺点是您的ENTRYPOINT 将作为/bin/sh -c 的子命令启动,这不传递信号。这意味着可执行文件将不是容器的 PID 1 - 并且不会接收 Unix 信号 - 因此您的可执行文件将不会收到来自 docker stop <container>SIGTERM

GCP 可能需要传递一些命令行参数。

source

【讨论】:

    【解决方案2】:

    我认为在 Cloud Build 环境沙箱中,您的 quickstart.sh 没有执行权限,您可以检查将此步骤添加到您的 Cloud Build cloudbuild.yaml 配置文件中:

    - name: 'ubuntu'
      entrypoint: 'bash'
      args:
      - '-c'
      - |
            ls -lart
    

    我不确定 Cloud Build 沙盒是否允许您向 bash 脚本授予执行权限,但您可以尝试通过使用 chmod +x quickstart.sh 添加另一个步骤来实现。

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 2021-10-11
      • 2020-08-01
      • 2021-05-31
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多