带有 Minikube 的 ImagePullBackOff 本地存储库
ImagePullBackOff local repository with Minikube
我正在尝试使用 minikube 和 kitematic 在我的本地机器上测试 kubernetes。但是,kubernetes 无法在我的本地存储库中提取图像 (ImagePullBackOff
)。
我试图用这个解决它:
但我没有 /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
我想我解决了
minikube start --vm-driver="virtualbox" --insecure-registry="$REG_IP":80
而不仅仅是
minikube start
$REG_IP 是:
REG_IP=docker-machine ip registry
添加 --insecure-registry="$REG_IP":80 似乎对我不起作用。
我必须使用 wlredeye 的回答
让它工作:
对于 http 注册表,此步骤适用于我:
- minikube ssh
- 编辑 /var/lib/boot2docker/profile 并添加到 $EXTRA_ARGS
--insecure-registry 192.168.99.1(your local machine's IP):5000
- 重新启动 docker 守护程序
sudo /etc/init.d/docker restart
- 确认您可以访问 docker 注册表
curl -s -S http://192.168.99.1/v2/_catalog
这是 minikube 版本:v0.14.0
首先你需要启动一个本地注册表,看来你已经做到了。
docker run -d -p 5000:5000 --restart=always --name myregistry registry:2
您可以通过ifconfig
查看您的minikube IP
应该有输出(在 minikube 开始使用 virtualbox 作为 VMdriver 之后)如下所示:
vboxnet0 Link encap:Ethernet HWaddr 0a:00:27:00:00:00<br>
inet addr:192.168.99.1 Bcast:192.168.99.255 Mask:255.255.255.0
inet6 地址:fe80::800:27ff:fe00:0/64 Scope:Link
向上广播 运行 多播 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
希望这可能有所帮助。
使用 minikube docker 注册表而不是本地 docker
设置docker指向minikube
eval $(minikube docker-env)
推送到 minikube docker
docker build -t hello-node:v1 .
将您的部署设置为不拉取 IfNotPresent
K8S默认设置为"Always"
更改为 "IfNotPresent"
imagePullPolicy: IfNotPresent
in Mac 我在 minikube 中的 dns 解析有问题,因为 /etc/resolv.conf 是用我的 mac ip 配置的。我没有在本地安装 dns 服务器,所以 minikube 无法解决任何问题。
我通过在本地安装 dns-server
解决了这个问题
brew install dnsmasq
sudo brew services start dnsmasq
就我而言,我必须执行以下步骤。
$ 评估 $(minikube docker-env)
$ minikube 配置设置驱动程序 virtualbox
$ minikube 启动
如果您使用 --vm-driver=none
,则需要将 imagePullPolicy 设置为 Never
。
imagePullPolicy: Never: the image is assumed to exist locally. No
attempt is made to pull the image.
在 Mac 我安装了 docker 客户端,所以我必须这样做
minikube config set driver docker
minikube start
启动 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
查看这篇精彩文章:How to Run Locally Built Docker Images in Kubernetes
我的环境
- OS:Debian
- 版本:11(靶心)
- Minikube: v1.24.0
- Kubectl: v1.22.4
- Docker: 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
根据此处的 kubernetes 文档:https://kubernetes.io/docs/concepts/containers/images/#imagepullpolicy-defaulting
如果您使用最新的标签进行部署,那么它会尝试拉取镜像。
在 WSL-2
上执行以下步骤后,我能够使用 v1 标签部署服务
- eval $(minikube -p minikube docker-env)
- minikube 启动
- docker build --tag=my-service:v1 .
- kubectl create deployment my-service --image=my-service:v1
- kubectl expose pod "my-service" --type=NodePort --port=8080
- minikube 服务我的服务
我正在尝试使用 minikube 和 kitematic 在我的本地机器上测试 kubernetes。但是,kubernetes 无法在我的本地存储库中提取图像 (ImagePullBackOff
)。
我试图用这个解决它:
但我没有 /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
我想我解决了
minikube start --vm-driver="virtualbox" --insecure-registry="$REG_IP":80
而不仅仅是
minikube start
$REG_IP 是:
REG_IP=docker-machine ip registry
添加 --insecure-registry="$REG_IP":80 似乎对我不起作用。
我必须使用 wlredeye 的回答
对于 http 注册表,此步骤适用于我:
- minikube ssh
- 编辑 /var/lib/boot2docker/profile 并添加到 $EXTRA_ARGS
--insecure-registry 192.168.99.1(your local machine's IP):5000
- 重新启动 docker 守护程序
sudo /etc/init.d/docker restart
- 确认您可以访问 docker 注册表
curl -s -S http://192.168.99.1/v2/_catalog
这是 minikube 版本:v0.14.0
首先你需要启动一个本地注册表,看来你已经做到了。
docker run -d -p 5000:5000 --restart=always --name myregistry registry:2
您可以通过ifconfig
应该有输出(在 minikube 开始使用 virtualbox 作为 VMdriver 之后)如下所示:
vboxnet0 Link encap:Ethernet HWaddr 0a:00:27:00:00:00<br>
inet addr:192.168.99.1 Bcast:192.168.99.255 Mask:255.255.255.0
inet6 地址:fe80::800:27ff:fe00:0/64 Scope:Link
向上广播 运行 多播 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
希望这可能有所帮助。
使用 minikube docker 注册表而不是本地 docker
设置docker指向minikube
eval $(minikube docker-env)
推送到 minikube docker
docker build -t hello-node:v1 .
将您的部署设置为不拉取 IfNotPresent
K8S默认设置为"Always" 更改为 "IfNotPresent"
imagePullPolicy: IfNotPresent
in Mac 我在 minikube 中的 dns 解析有问题,因为 /etc/resolv.conf 是用我的 mac ip 配置的。我没有在本地安装 dns 服务器,所以 minikube 无法解决任何问题。
我通过在本地安装 dns-server
解决了这个问题brew install dnsmasq
sudo brew services start dnsmasq
就我而言,我必须执行以下步骤。
$ 评估 $(minikube docker-env)
$ minikube 配置设置驱动程序 virtualbox
$ minikube 启动
如果您使用 --vm-driver=none
,则需要将 imagePullPolicy 设置为 Never
。
imagePullPolicy: Never: the image is assumed to exist locally. No attempt is made to pull the image.
在 Mac 我安装了 docker 客户端,所以我必须这样做
minikube config set driver docker
minikube start
启动 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
查看这篇精彩文章:How to Run Locally Built Docker Images in Kubernetes
我的环境
- OS:Debian
- 版本:11(靶心)
- Minikube: v1.24.0
- Kubectl: v1.22.4
- Docker: 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
根据此处的 kubernetes 文档:https://kubernetes.io/docs/concepts/containers/images/#imagepullpolicy-defaulting
如果您使用最新的标签进行部署,那么它会尝试拉取镜像。 在 WSL-2
上执行以下步骤后,我能够使用 v1 标签部署服务- eval $(minikube -p minikube docker-env)
- minikube 启动
- docker build --tag=my-service:v1 .
- kubectl create deployment my-service --image=my-service:v1
- kubectl expose pod "my-service" --type=NodePort --port=8080
- minikube 服务我的服务