[英]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
設置為ifNotPresent
或never
以便它不會嘗試拉取圖像(並且不會嘗試進行 docker 登錄)。
我正在為一個獨立的 pod 提供一個指針。 對於工作來說應該是一樣的。 畢竟,它只在 pod 中運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.