gcloud submit :使用 --file 参数指定 Dockerfile 似乎不起作用
gcloud submit : specify Dockerfile with --file parameter doesn't seem to work
在我的项目中,Dockerfiles 没有存储在我想在我的图像中复制的文件的相同位置。喜欢:
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}'
]
然后我从 root 构建镜像:
gcloud builds submit .
--config=cloudbuild.yaml
--substitutions [...]
.
我检查了我的 GCP Bucket,在 gcloud submit (.) 中指定的源已成功上传,因此应该可以在 ./workspace/ 中访问。
但是构建失败并出现以下错误:
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /workspace/ .: no such file or directory
他似乎不想使用 --file 参数中指定的 Dockerfile。而且我无法使用此参数找到 cloudbuild.yaml 的示例。
知道发生了什么事吗?
可能是,如果您的文件结构是准确的,那么您引用的 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
并且:
./Dockerfiles/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
在我的项目中,Dockerfiles 没有存储在我想在我的图像中复制的文件的相同位置。喜欢:
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}'
]
然后我从 root 构建镜像:
gcloud builds submit .
--config=cloudbuild.yaml
--substitutions [...]
.
我检查了我的 GCP Bucket,在 gcloud submit (.) 中指定的源已成功上传,因此应该可以在 ./workspace/ 中访问。
但是构建失败并出现以下错误:
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /workspace/ .: no such file or directory
他似乎不想使用 --file 参数中指定的 Dockerfile。而且我无法使用此参数找到 cloudbuild.yaml 的示例。 知道发生了什么事吗?
可能是,如果您的文件结构是准确的,那么您引用的 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
并且:
./Dockerfiles/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