簡體   English   中英

Docker/Kubernetes - 無法從本地存儲庫中提取圖像

[英]Docker/Kubernetes - failed to pull image from local repository

我對 docker/kubernetes 很陌生。 我在我的 AWS EC2 實例上構建了一個 docker 鏡像,我可以使用它運行

sudo docker run imagename

這運行成功。 當我運行時,我還可以看到圖像存在於本地 docker 存儲庫中

sudo docker image ls

(注意:我必須使用 sudo 否則這些命令會給出權限錯誤)

現在我試圖讓 kubernetes 開始一項工作,用該圖像創建一個容器,但是當我這樣做時,我收到以下錯誤:

Failed to pull image "imagename": rpc error: code = Unknown desc = Error response from daemon: pull access denied for imagename, repository does not exist or may require 'docker login'

這是我用來嘗試使用 kubernetes API 創建作業的 Python/flask 代碼。 該作業在服務器上成功創建,但是當我檢查 kubernetes 日志時,我看到了錯誤。

config.load_kube_config()
api_client = client.BatchV1Api()

container = client.V1Container(
    name="premium",
    image="imagename",
    resources=client.V1ResourceRequirements(requests={'cpu':'.9'}, limits={'cpu':'2'}),
    env=[client.V1EnvVar(name='dataset', value=ds )]
    )

# Create and configurate a spec section
template = client.V1PodTemplateSpec(
    metadata=client.V1ObjectMeta(labels={"app": "premium"}),
    spec=client.V1PodSpec(restart_policy="Never", containers=[container]))

# Create the specification of deployment
spec = client.V1JobSpec(
    template=template,
    backoff_limit=4)

# Instantiate the job object
job = client.V1Job(
    api_version="batch/v1",
    kind="Job",
    metadata=client.V1ObjectMeta(generate_name = 'premium-job-'),
    spec=spec)

api_response = api_client.create_namespaced_job("default", job, pretty=True)

我假設 Docker 鏡像在 Kubernetes 集群的所有節點上都可用。 該圖像應該在所有節點上可用/您需要提及nodeSelector屬性。 在您的圖像所在的完全相同的節點上運行 pod。

現在來到你的錯誤。 我在本地圖像上看到了類似的問題。 imagePullPolicy屬性在這里產生了問題。 它的默認值always意味着它 k8s(更具體地說是 kubelet)嘗試拉圖像以拉圖像它嘗試執行 docker 登錄(也許只是為了比較遠程和本地圖像)並失敗。

如何解決問題? imagePullPolicy設置為ifNotPresentnever以便它不會嘗試拉取圖像(並且不會嘗試進行 docker 登錄)。

在這里閱讀更多

我正在為一個獨立的 pod 提供一個指針。 對於工作來說應該是一樣的。 畢竟,它只在 pod 中運行。

暫無
暫無

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

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