簡體   English   中英

清單未知:無法從請求 \"/v2/$PROJECT_ID/$IMAGE:latest/manifests/latest\ ".

[英]manifest unknown: Failed to fetch \"latest\" from request \"/v2/$PROJECT_ID/$IMAGE:latest/manifests/latest\ "."

我在虛擬機中有一些 python 個文件,每周運行一次以從網站上抓取信息。 這是通過 cloud scheduler 和 cloud function 自動完成的,並確認它可以工作。 每次我更新 Github 內部的代碼時,我想使用雲構建和雲運行來更新虛擬機內部的代碼。我在某處讀到,為了將容器映像部署到虛擬機,虛擬機必須有一個容器-os,所以我通過計算引擎手動創建了一個符合該條件的新 VM。 container-os 虛擬機已經制作完成。 我只需要用來自 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\"."
}" 

為什么在我想要帶有提交 hash 的標簽時請求最新標簽,我該如何解決?

這是虛擬機日志(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'

這是 dockerfile:

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" ]

這是你好.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)))

您可以使用 cloudbuild.yaml 文件中的Gcloud 命令使用最新映像更新 GCE Container-os VM。 此命令用於更新運行容器映像的 Compute Engine 虛擬機實例。

每當映像更新到 GCE container-os VM 時,您都可能會遇到 vm 重啟。 發生這種情況時,它將為 VM 分配一個新的 ip,如果需要,您可以使用 Static 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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM