43

我正在尝试使用 minikube 和 kitematic 在我的本地机器上测试 kubernetes。但是,kubernetes 无法在我的本地存储库 ( ImagePullBackOff) 中提取图像。

我试图用这个来解决它:Can not pull docker image from private repo when using Minikube

但我没有/etc/init.d/docker,我认为是因为运动学?(我在 OS X 上)

编辑 :

我安装了https://github.com/docker/docker-registry,并且

docker tag local-image-build localhost:5000/local-image-build

docker push localhost:5000/local-image-build

我的 kubernetes yaml 包含:

spec:
  containers:
  - name: backend-nginx
    image: localhost:5000/local-image-build:latest
    imagePullPolicy: Always

但它仍然无法正常工作......日志:

Error syncing pod, skipping: failed to "StartContainer" 
for "backend-nginx" with ErrImagePull: "Error while pulling image: 
Get http://127.0.0.1:5000/v1/repositories/local-image-build/images: 
dial tcp 127.0.0.1:5000: getsockopt: connection refused

编辑 2:

我不知道我是否走在正确的道路上,但我发现:

http://kubernetes.io/docs/user-guide/images/

但我不知道我的 DOCKER_USER 是什么...

kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL

编辑 3

现在我上了我的吊舱:

Failed to pull image "local-image-build:latest": Error: image library/local-image-build not found
Error syncing pod, skipping: failed to "StartContainer" for "backend-nginx" with ErrImagePull: "Error: image library/local-image-build not found"

帮帮我,我快疯了。

编辑 4

Error syncing pod, skipping: failed to "StartContainer" for "backend-nginx" with ErrImagePull: "Error response from daemon: Get https://192.168.99.101:5000/v1/_ping: tls: oversized record received with length 20527"

我补充说:

EXTRA_ARGS='
    --label provider=virtualbox
    --insecure-registry=192.168.99.101:5000

到我的 docker 配置,但它仍然不起作用,同样的消息....

顺便说一句,我改变了我的 yaml :

 spec:
      containers:
      - name: backend-nginx
        image: 192.168.99.101:5000/local-image-build:latest
        imagePullPolicy: Always

我像这样运行我的注册表:

docker run -d -p 5000:5000 --restart=always --name myregistry registry:2
4

11 回答 11

35

使用 minikube docker 注册表而不是本地 docker

https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/#create-a-docker-container-image

将 docker 设置为指向 minikube

eval $(minikube docker-env)

推送到 minikube docker

docker build -t hello-node:v1 .

将您的部署设置为不拉 IfNotPresent

K8S 默认设置为“Always” 更改为“IfNotPresent”

imagePullPolicy: IfNotPresent

相关问题

于 2018-03-25T17:41:58.917 回答
15

我想我解决了

minikube start --vm-driver="virtualbox" --insecure-registry="$REG_IP":80

而不仅仅是

minikube start

$REG_IP 是:

REG_IP=docker-machine ip registry

资源

于 2016-09-05T13:14:43.500 回答
3

如果您使用--vm-driver=none,则需要将imagePullPolicy设置为Never

imagePullPolicy:从不:假设图像存在于本地。没有尝试拉取图像。

于 2020-08-16T18:36:43.717 回答
1

就我而言,我必须执行以下步骤。

$ eval $(minikube docker-env)

$ minikube config 设置驱动程序 virtualbox

$ minikube 开始

于 2020-05-09T20:28:17.350 回答
1

根据此处的 kubernetes 文档:https ://kubernetes.io/docs/concepts/containers/images/#imagepullpolicy-defaulting

如果您使用最新标签进行部署,那么它将尝试拉取图像。遵循 WSL-2 上的步骤后,我能够使用 v1 标签部署服务

  1. 评估 $(minikube -p minikube docker-env)
  2. minikube 启动
  3. docker build --tag=my-service:v1 。
  4. kubectl 创建部署 my-service --image=my-service:v1
  5. kubectl 暴露 pod "my-service" --type=NodePort --port=8080
  6. minikube 服务我的服务
于 2022-01-04T08:31:42.690 回答
0

添加 --insecure-registry="$REG_IP":80 似乎对我不起作用。

在使用 Minikube使其工作时,我必须使用 wlredeye 在 Can not pull docker image from private repo 中的答案:

对于 http 注册表,此步骤适用于我:

  1. minikube ssh
  2. 编辑 /var/lib/boot2docker/profile 并添加到 $EXTRA_ARGS --insecure-registry 192.168.99.1(your local machine's IP):5000
  3. 重新启动 docker 守护进程 sudo /etc/init.d/docker restart
  4. 验证您可以访问 docker 注册表 curl -s -S http://192.168.99.1/v2/_catalog

这是 minikube 版本:v0.14.0

于 2016-12-19T05:16:24.393 回答
0

首先,您需要启动一个本地注册表,看来您已经完成了。

docker run -d -p 5000:5000 --restart=always --name myregistry registry:2

您可以通过以下方式检查您的 minikube IPifconfig

应该有输出(在 minikube 开始使用 virtualbox 作为 VMdriver 之后)看起来像:

vboxnet0 Link encap:Ethernet HWaddr 0a:00:27:00:00:00
inet addr:192.168.99.1 Bcast:192.168.99.255 Mask:255.255.255.0 inet6 addr: fe80::800:27ff:fe00:0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:515 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:86256 (86.2 KB)

使用

minikube start --insecure-registry=192.168.99.1:5000

您实际上可以通过(在 minikube 内)简单地检查是否可以拉出自己的图像

docker pull 192.168.99.1:5000/your_own_repo/your_own_images

希望这可能会有所帮助。

于 2017-03-03T07:46:32.730 回答
0

在 Mac 中,我在 minikube 中的 dns 解析有问题,因为 /etc/resolv.conf 是用我的 mac ip 配置的。我没有在本地安装 dns 服务器,所以 minikube 无法解决任何问题。

我通过在本地安装 dns-server 解决了这个问题

brew install dnsmasq
sudo brew services start dnsmasq
于 2020-04-06T22:42:02.497 回答
0

在 Mac 中,我安装了 docker 客户端,所以我必须这样做

minikube config set driver docker
minikube start
于 2021-06-24T11:59:40.500 回答
0

启动 minikube

minikube start --insecure-registry "10.0.0.0/24,192.168.39.0/24"
minikube addons enable registry

查找 minikube IP

minikube ip

设置 docker/insecure-registry

# edit /etc/docker/daemon.json
{
  ...
  "insecure-registries": [ "your-minikube-ip:5000" ]
  ...
}

推送你的图片

docker build --tag $(minikube ip):5000/local-image-build:latest
docker push $(minikube ip):5000/local-image-build:latest

好好享受。

请参阅:
https ://minikube.sigs.k8s.io/docs/handbook/pushing/#4-pushing-to-an-in-cluster-using-registry-addon

于 2021-11-17T13:55:33.947 回答
0

查看这篇精彩的文章:如何在 Kubernetes 中运行本地构建的 Docker 映像

我的环境

  • 操作系统:Debian
  • 版本:11(靶心)
  • Minikube:v1.24.0
  • Kubectl:v1.22.4
  • 码头工人:20.10.5+dfsg1

它涵盖了所有错误的图像阶段和解决方法。

阶段

ErrImagePull

编辑deployment.yaml并添加imagePullPolicy: Never

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-local-deployment
spec:
  template:
    metadata:
      name: my-pod
    spec:
      containers:
      - name: my-container
        image: my-local-image    # The one built and tagged locally
        imagePullPolicy: Never   # So it doesn't pull the image from remote registry

ErrImageNeverPull

跑:eval $(minikube -p minikube docker-env)

输出将本地 Docker 守护进程指向 minikube 内部 Docker 注册表所需的环境变量

最后

重建镜像,将其安装在 minikube 注册表中:

docker build . -t my-image

于 2021-12-01T17:01:01.373 回答