gin*_*nda 15 docker kubernetes docker-registry
我在一台机器上使用kubernetes进行测试,我已经从nginx docker图像构建了一个自定义图像,但是当我尝试在kubernetes中使用图像时,我得到一个图像拉错误?????
我的POD YAML
kind: Pod
apiVersion: v1
metadata:
name: yumserver
labels:
name: frontendhttp
spec:
containers:
- name: myfrontend
image: my/nginx:latest
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: mypd
imagePullSecrets:
- name: myregistrykey
volumes:
- name: mypd
persistentVolumeClaim:
claimName: myclaim-1
Run Code Online (Sandbox Code Playgroud)
我的KUBERNETES指挥
kubectl create -f pod-yumserver.yaml
错误
kubectl describe pod yumserver
Name: yumserver
Namespace: default
Image(s): my/nginx:latest
Node: 127.0.0.1/127.0.0.1
Start Time: Tue, 26 Apr 2016 16:31:42 +0100
Labels: name=frontendhttp
Status: Pending
Reason:
Message:
IP: 172.17.0.2
Controllers: <none>
Containers:
myfrontend:
Container ID:
Image: my/nginx:latest
Image ID:
QoS Tier:
memory: BestEffort
cpu: BestEffort
State: Waiting
Reason: ErrImagePull
Ready: False
Restart Count: 0
Environment Variables:
Conditions:
Type Status
Ready False
Volumes:
mypd:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: myclaim-1
ReadOnly: false
default-token-64w08:
Type: Secret (a secret that should populate this volume)
SecretName: default-token-64w08
Events:
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
13s 13s 1 {default-scheduler } Normal Scheduled Successfully assigned yumserver to 127.0.0.1
13s 13s 1 {kubelet 127.0.0.1} Warning MissingClusterDNS kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy.
12s 12s 1 {kubelet 127.0.0.1} spec.containers{myfrontend} Normal Pulling pulling image "my/nginx:latest"
8s 8s 1 {kubelet 127.0.0.1} spec.containers{myfrontend} Warning Failed Failed to pull image "my/nginx:latest": Error: image my/nginx:latest not found
8s 8s 1 {kubelet 127.0.0.1} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "myfrontend" with ErrImagePull: "Error: image my/nginx:latest not found"
Run Code Online (Sandbox Code Playgroud)
Mar*_*her 24
所以你的机器上有图像.它仍然试图从Docker Hub中提取图像,但这可能不是你想要的单机设置.发生这种情况是因为最新标记将imagePullPolicy设置为Always隐式.您可以尝试将其明确设置为IfNotPresent或更改为最新以外的标记. - Timo Reimann 4月28日7:16
出于某种原因,Timo Reimann只是将上述内容作为评论发布,但它肯定应该是这个问题的正式答案,所以我再次发布它.
dry*_*hip 23
无论您是否使用 minikube,这都应该有效:
1)启动本地注册容器:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
Run Code Online (Sandbox Code Playgroud)
2)docker images找出你本地镜像的 REPOSITORY 和 TAG。然后为您的本地图像创建一个新标签:
docker tag <local-image-repository>:<local-image-tag> localhost:5000/<local-image-name>
Run Code Online (Sandbox Code Playgroud)
如果您本地图像的 TAG 是<none>,您可以简单地执行以下操作:
docker tag <local-image-repository> localhost:5000/<local-image-name>
Run Code Online (Sandbox Code Playgroud)
3)推送到本地注册表:
docker push localhost:5000/<local-image-name>
Run Code Online (Sandbox Code Playgroud)
这将自动将latest标签添加到localhost:5000/<local-image-name>. 您可以通过执行 再次检查docker images。
4) 在你的 yaml 文件中,设置imagePullPolicy为IfNotPresent:
...
spec:
containers:
- name: <name>
image: localhost:5000/<local-image-name>
imagePullPolicy: IfNotPresent
...
Run Code Online (Sandbox Code Playgroud)
就是这样。现在您的 ImagePullError 应该得到解决。
Ali*_*lin 21
在构建映像之前运行eval $(minikube docker-env).
完整答案:https://stackoverflow.com/a/40150867
进一步分析ErrImagePull问题的最简单方法是通过 ssh 进入节点并尝试通过执行docker pull my/nginx:latest. 我从未在单台机器上设置 Kubernetes,但可以想象由于某种原因无法从节点访问 Docker 守护进程。一个简单的拉动尝试应该提供更多信息。
小智 7
只需将 imagePullPolicy 添加到您的部署文件中,它对我有用
spec:
containers:
- name: <name>
image: <local-image-name>
imagePullPolicy: Never
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32300 次 |
| 最近记录: |