0

我在 VM 中有一些 python 文件,它们每周都会运行以从网站上抓取信息。这是通过云调度程序和云功能自动完成的,并确认它可以工作。每次我更新 Github 内的代码时,我都想使用 cloud build 和 cloud run 来更新 VM 内的代码。我在某处读到,为了将容器映像部署到 VM,VM 必须具有容器操作系统,因此我通过计算引擎手动创建了一个符合该条件的新 VM。容器操作系统 VM 已经制作完成。我只需要使用来自 Github 的更新代码构建的新容器映像来更新它的容器映像。

我正在尝试构建一个容器映像,稍后我将使用它来更新虚拟机内部的代码。每次我推送到我的 Github 存储库中的文件夹时都会触发云运行。

我检查了 Container Registry 并且正在创建映像,但是当我检查虚拟机时,我不断收到此错误:

"Error: Failed to start container: Error response from daemon:
{
  "message":"manifest for gcr.io/$PROJECT_ID/$IMAGE:latest not found: manifest unknown: Failed to fetch \"latest\" from request \"/v2/$PROJECT_ID/$IMAGE:latest/manifests/latest\"."
}" 

当我想要带有提交哈希的标签时,为什么会请求最新的标签,我该如何修复它?

这是虚拟机日志(sudo journalctl -u konlet-startup):

Started Containers on GCE Setup.
Starting Konlet container startup agent
Downloading credentials for default VM service account from metadata server
Updating IPtables firewall rules - allowing tcp traffic on all ports
Updating IPtables firewall rules - allowing udp traffic on all ports
Updating IPtables firewall rules - allowing icmp traffic on all ports
Launching user container $CONTAINER
Configured container 'preemptive-public-email-vm' will be started with name 'klt-$IMAGE-xqgm'.
Pulling image: 'gcr.io/$PROJECT_ID/$IMAGE'
Error: Failed to start container: Error response from daemon: {"message":"manifest for gcr.io/$PROJECT_ID/$IMAGE:latest not found: manifest unknown: Failed to fetch \"latest\" from request \"/v2/$PROJECT_ID/$IMAGE/manifests/latest\"."}
Saving welcome script to profile.d
Main process exited, code=exited, status=1/FAILURE
Failed with result 'exit-code'.
Consumed 96ms CPU time

这是 cloudbuild.yaml:

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/$PROJECT_ID/$IMAGE:$COMMIT_SHA', './folder_name']
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'gcr.io/$PROJECT_ID/$IMAGE:$COMMIT_SHA']
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: gcloud
  args:
  - 'run'
  - 'deploy'
  - 'run-public-email'
  - '--image'
  - 'gcr.io/$PROJECT_ID/$IMAGE:$COMMIT_SHA'
  - '--region'
  - 'us-central1'
images:
- 'gcr.io/$PROJECT_ID/$IMAGE:$COMMIT_SHA'

这是泊坞窗文件:

FROM python:3.9.7-slim-buster

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

COPY . .

CMD [ "python3", "hello.py" ]

这是 hello.py:

import os

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return "Hello world"

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=int(os.environ.get('PORT', 8080)))
4

1 回答 1

0

您可以使用cloudbuild.yaml 文件中的Gcloud 命令将 GCE Con​​tainer-os VM 更新为最新的镜像。此命令用于更新运行容器映像的 Compute Engine 虚拟机实例。

每当映像更新到 GCE 容器操作系统 VM 时,您可能会遇到 vm 重新启动。发生这种情况时,它会为 VM 分配一个新的 IP,如果需要,您可以使用静态 IP 来避免它。

示例 Cloudbuild.yaml :

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/$PROJECT_ID/$IMAGE:$COMMIT_SHA', './folder_name']
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'gcr.io/$PROJECT_ID/$IMAGE:$COMMIT_SHA']
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: gcloud
  args:
  - 'compute'
  - 'instances'
  - 'update-container'
  - 'Instance Name'
  - '--container-image'
  - 'gcr.io/$PROJECT_ID/$IMAGE:$COMMIT_SHA'
于 2021-09-30T07:01:13.460 回答