当前位置: 首页 > 知识库问答 >
问题:

GCloud提交:指定带有--file参数的Dockerfile似乎不起作用

夏弘文
2023-03-14

在我的项目中,DockerFile与我要在图像中复制的文件存储在不同的位置。比如:

root
     Dockerfiles:
          app_name1:
              dockerfile1
          ...
    folder
          app1
          app2
          ...
cloudbuild

我有一个这样的cloudbuild.yaml:

steps:
- name: gcr.io/cloud-builders/docker
  args:
  - build
  - '--tag=eu.gcr.io/$PROJECT_ID/${_IMAGE_NAME}:${_STAGE}'
  - **'-f ./Dockerfiles/${_IMAGE_NAME}/Dockerfile'**
  - .
images: [
    'eu.gcr.io/$PROJECT_ID/${_IMAGE_NAME}'
]

我从根构建图像,如下所示:

gcloud builds submit .
      --config=cloudbuild.yaml
      --substitutions [...]
      .

我在我的GCP Bucket中检查了gcloud submit(.)中指定的源已成功上载,因此应可在中访问/工作区/。

但构建失败,出现以下错误:

无法准备上下文:无法评估Dockerfile路径中的符号链接:lstat/workspace/:没有这样的文件或目录

他似乎不想使用--file参数中指定的Dockerfile。我找不到cloudbuild的例子。yaml使用了这个论点。知道发生了什么吗?

共有1个答案

姚高爽
2023-03-14

如果您的文件结构是准确的,那么可能是因为您错误地引用了Dockerfile路径。

健全性检查是首先在本地运行docker build

PROJECT_ID="..."
_IMAGE_NAME="app1"
_STAGE="dev"

docker build \
--tag=gcr.io/$PROJECT_ID/${_IMAGE_NAME}:${_STAGE} \
--file=./Dockerfiles/${_IMAGE_NAME}/Dockerfile \
.

以下是我的作品:

.
├── cloudbuild.yaml
├── Dockerfiles
│   └── app1
│       └── Dockerfile
└── folder
    └── app1
        └── greeting.txt

和:

/Dockerfile/app1/Dockerfile

FROM busybox

WORKDIR /tmp

COPY ./folder/app1/greeting.txt ./greeting.txt

ENTRYPOINT ["cat","/tmp/greeting.txt"]

和:

cloudbuild。yaml

steps:
  - name: docker
    args:
      - build
      - --tag=gcr.io/$PROJECT_ID/${_IMAGE_NAME}:${_STAGE}
      - --file=./Dockerfiles/${_IMAGE_NAME}/Dockerfile
      - .
images:
  - gcr.io/$PROJECT_ID/${_IMAGE_NAME}

和:

PROJECT="..."
QUESTION="64972175"
gcloud builds submit . \
--config=./cloudbuild.yaml \
--substitutions=_IMAGE_NAME=app1,_STAGE="dev" \
--project=${PROJECT}

产量:

BUILD
Pulling image: docker
Using default tag: latest
latest: Pulling from library/docker
Digest: sha256:9170b902404a630a982a2a6473442d3e2cc2342b66345f7a9cf148f8affcf5d3
Status: Downloaded newer image for docker:latest
docker.io/library/docker:latest
Sending build context to Docker daemon  6.144kB
Step 1/4 : FROM busybox
latest: Pulling from library/busybox
Digest: sha256:a9286defaba7b3a519d585ba0e37d0b2cbee74ebfe590960b0b1d6a5e97d1e1d
Status: Downloaded newer image for busybox:latest
 ---> f0b02e9d092d
Step 2/4 : WORKDIR /tmp
 ---> Running in 6ffe8d2b3f56
Removing intermediate container 6ffe8d2b3f56
 ---> 51dcdc2e141a
Step 3/4 : COPY ./folder/app1/greeting.txt ./greeting.txt
 ---> 7459813216f3
Step 4/4 : ENTRYPOINT ["cat","/tmp/greeting.txt"]
 ---> Running in 25362a24391b
Removing intermediate container 25362a24391b
 ---> 398b1f4a60e2
Successfully built 398b1f4a60e2
Successfully tagged gcr.io/[[PROJECT]]/app1:dev
PUSH
Pushing gcr.io/[[PROJECT]]/app1
The push refers to repository [gcr.io/[[PROJECT]]/app1]
8b5d68988e85: Preparing
d2421964bad1: Preparing
d2421964bad1: Layer already exists
8b5d68988e85: Pushed
dev: digest: sha256:d33bd458b8df930fc3338110f8369743ac74068b8a527c5f59958ee1ce1182ff size: 734
DONE
 类似资料:
  • 我的代码看起来像 我的文件如下所示 当我运行程序时,我看到 我怎样才能修好它呢?

  • 问题内容: 我在使用该功能时遇到了麻烦。 我只需要知道SQL查询是否返回零行。 我已经尝试过以下简单的语句: 类型是哪里。上面的代码似乎不起作用。无论是否为空,它将始终打印该消息。 我检查了SQL查询本身,当存在行时它正确返回了非空结果。 关于如何确定查询是否已返回0行的任何想法?我用谷歌搜索,找不到任何答案。 问题答案: ResultSet.getFetchSize()不返回结果数!从这里: 使

  • 我正在用Eclipse Juno、WindowBuilder在Java7 SE上开发我的第一个JDialog,“摆动自动数据库”()。我很想测试自动数据绑定 我只在Eclipse数据绑定GUI的帮助下为类用户提供了一个编辑对话框。 “我的对话框”将打开,其中的文本字段包含来自用户实例的正确初始值。当我修改文本字段文本,然后单击Ok按钮时,我看不到对用户实例的任何更改。这是我的对话代码。。。。。 绑

  • 问题内容: 我有一个Dockerfile,我正在将其安装在一起以安装Vanilla python环境(稍后将在其中安装应用程序)。 构建运行正常,直到最后一行,我得到以下异常: 如果我进入该目录(只是为了测试是否已完成前面的步骤),我可以看到文件按预期存在: 如果我尝试仅运行命令,则会收到与上述相同的“未找到”错误。但是,如果我运行交互式shell会话,则源代码确实可以工作: 我可以从这里运行脚本

  • 我有一个Dockerfile,我将把它放在一起安装一个vanilla python环境(我将在其中安装一个应用程序,但以后再安装)。 构建运行正常,直到最后一行,我得到以下异常: 从Dockerfile运行指令运行shell脚本的最佳方法是什么来解决这个问题(我运行Ubuntu12.04LTS的默认基本映像)。

  • 问题内容: 我只是在阅读这个问题,想尝试使用别名方法,而不是使用功能包装器方法,但是我似乎无法使其在Firefox 3或3.5beta4或GoogleChrome中在调试窗口和在测试网页中。 萤火虫: 如果将其放在网页中,则对myAlias的调用给我这个错误: Chrome(为清楚起见,插入了>>>): 在测试页中,我得到了相同的“非法调用”。 难道我做错了什么?有人可以复制吗? 另外,奇怪的是,