我有一个Dockerfile创建的以下图像:
REPOSITORY TAG IMAGE ID CREATED SIZE
ruby/lab latest f1903b1508cb 2 hours ago 729.6 MB
我有以下YAML文件:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: ruby-deployment
spec:
replicas: 2
template:
metadata:
labels:
app: ruby
spec:
containers:
- name: ruby-app
image: ruby/lab
imagePullPolicy: IfNotPresent
ports:
- containerPort: 4567
当我创建部署时,我在pod中获得了以下信息:
ruby-deployment-3830038651-sa4ii 0/1 ImagePullBackOff 0 7m
ruby-deployment-3830038651-u1tvc 0/1 ImagePullBackOff 0 7m
以下错误Failed to pull image "ruby/lab:latest": Error: image ruby/lab not found
:
8m 2m 6 {kubelet minikube} spec.containers{ruby} Normal Pulling pulling image "ruby/lab:latest"
8m 2m 6 {kubelet minikube} spec.containers{ruby} Warning Failed Failed to pull image "ruby/lab:latest": Error: image ruby/lab not found
8m 2m 6 {kubelet minikube} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "ruby" with ErrImagePull: "Error: image ruby/lab not found"
真的有必要在docker中使用注册表吗?我只是想在本地进行测试并将我的代码/ repo传递给朋友进行测试
由于
答案 0 :(得分:62)
您可以通过运行
将docker客户端指向VM的docker守护程序eval $(minikube docker-env)
然后,您可以正常构建图像并使用kubectl创建kubernetes资源。确保你有
imagePullPolicy: IfNotPresent
在您的YAML或JSON规范中。
此外,还有一个标志可以将不安全的注册表传递给minikube VM。但是,必须在第一次创建机器时指定。
minikube start --insecure-registry
使用私有注册表时,您可能还想阅读此内容 http://kubernetes.io/docs/user-guide/images/
答案 1 :(得分:17)
AFAIR minikube在VM中运行,因此它不会看到您在主机上本地构建的图像,但是......如https://github.com/kubernetes/minikube/blob/master/docs/reusing_the_docker_daemon.md中所述,您可以eval $(minikube docker-env)
实际使用def interval_point(a, b, x):
return (b - a) * x + a
利用在minikube上运行的docker守护进程,从此在minikubes docker上构建你的图像,从而期望它可以在没有从外部注册表中拉出的情况下被minikubes k8s引擎使用
答案 2 :(得分:1)
要使用图像而不上传图像,可以按照以下步骤操作: 重要的是,由于要设置环境变量,因此必须位于同一外壳中!
答案 3 :(得分:0)
docker pull,在每个节点中手动拉所有图像 要么 运行DaemonSet提取所有图像
答案 4 :(得分:0)
我在Centos 8.1.1911上遇到了minikube v1.9.2,Kubernetes v1.18.0,Docker 19.03.2的类似问题。所有这些都在用于开发的一台机器上,我选择了本地不安全的Docker注册表。
以下步骤对我与本地kubernetes / minikube env共享本地不安全的docker注册表并允许kube节点(以及minikube)访问Internet很有用:
systemctl disable firewalld
docker0
接口名称和IP 172.17.0.1
。本地不安全的注册表将在此IP上暴露于minikube。/etc/docker/daemon.json
中的以下内容:{"insecure-registries" : ["172.17.0.1:5000"]}
systemctl restart docker.service
minikube start --insecure-registry="172.17.0.1:5000"
minikube delete
)docker build -t mydemo/demo .
docker tag mydemo/demo 172.17.0.1:5000/myminikubedemo
docker push 172.17.0.1:5000/myminikubedemo
kubectl create deployment mydemo --image=172.17.0.1:5000/myminikubedemo --dry-run=client -o=yaml > deployment.yaml
kubectl apply -f deployment.yaml