我构建一个图像并标记它,然后将其推送到本地注册表,它成功推送,我也可以从注册表中拉出它也是当我运行curl得到标签列表我得到结果,这是我做的
- 1- docker build -t 127.0.0.1:5000/eliza/console:0.0.1 .
- 2- docker run -d -p 5000:5000 --name registry registry:2
- 3- docker tag a3703d02a199 127.0.0.1:5000/eliza/console:0.0.1
- 4- docker push 127.0.0.1:5000/eliza/console:0.0.1
- 5- curl -X GET http://127.0.0.1:5000/v2/eliza/console/tags/list
以上所有步骤都运行正常,没有任何问题.
我的问题是当我运行minikube并尝试在其中的本地注册表中访问此图像
所以,当我运行下一个命令
- 1- sudo minikube start --insecure-registry 127.0.0.1:5000
- 2- eval $(minikube docker-env)
- 3- minikube ssh
- 4- curl -X GET http://127.0.0.1:5000/v2/eliza/console/tags/list
在最后一步(第4点),它给了我下一条消息
curl: (7) Failed to connect to 127.0.0.1 port 5000: Connection refused
所以我可以从我的机器访问图像注册表,但不能从minikube访问,当我在minikube上使用Kubernetes部署这个图像并且由于无法连接到http://127.0.0.1:5000而导致部署失败时,我当然会遇到问题
你能帮我配置minikube来查看我的本地注册表,这样我的问题就能解决,然后我可以成功地使用kubernetes将图像部署到minikube吗?
UPDATE
我正在使用这个yaml文件(我命名为ConsolePre.yaml)来使用kubernetes部署我的图像
- apiVersion: v1
- kind: Service
- Metadata:
- name: tripbru-console
- labels:
- app: tripbru-console
- spec:
- ports:
- - port: 9080
- targetPort: 9080
- nodePort: 30181
- selector:
- app: tripbru-console
- tier: frontend
- type: NodePort
- ---
- apiVersion: extensions/v1beta1
- kind: Deployment
- Metadata:
- name: tripbru-console
- labels:
- app: tripbru-console
- spec:
- strategy:
- type: Recreate
- template:
- Metadata:
- labels:
- app: tripbru-console
- tier: frontend
- spec:
- containers:
- - image: docker.local:5000/eliza/console:0.0.1
- name: tripbru-console
- ports:
- - containerPort: 9080
- name: tripbru-console
当我运行下一个命令来应用更改
sudo kubectl apply -f /PATH_TO_YAML_FILE/ConsolePre.yaml
结果是
- NAME READY STATUS RESTARTS AGE
- po/tripbru-console-1655054400-x3g87 0/1 ErrImagePull 0 1m
当我运行describe命令时
sudo kubectl describe pod tripbru-console-1655054400-x3g87
我在描述结果中找到了下一条消息
Error response from daemon: {“message”:”Get
07001: dial tcp: lookup docker.local on
10.0.2.3:53: read udp 10.0.2.15:57792->10.0.2.3:53: i/o timeout”}
我在minikube / etc / hosts中配置了docker.local xxx.xxx.xx.4,所以我不知道10.0.2.3:53和10.0.2.15:57792来自哪里.
那我怎么能解决这个问题呢.
谢谢 :)
因此,如果您的机器IP是192.168.0.101.然后下面的工作
- 1- docker build -t 127.0.0.1:5000/eliza/console:0.0.1 .
- 2- docker run -d -p 5000:5000 --name registry registry:2
- 3- docker tag a3703d02a199 127.0.0.1:5000/eliza/console:0.0.1
- 4- docker push 127.0.0.1:5000/eliza/console:0.0.1
- 5- curl -X GET http://127.0.0.1:5000/v2/eliza/console/tags/list
因为docker run将注册表映射到127.0.0.1:5000和192.168.0.101:5000.现在在你的机器上只有这个127.0.0.1可以工作.现在你用的时候
- 3- minikube ssh
你进入minikube机器并且没有在127.0.0.1:5000上运行的注册表.所以错误.使用机器机器IP在本机内无法访问注册表.
所以在你的机器上在/ etc / hosts中创建一个条目
- docker.local 127.0.0.1
并将命令更改为
- 1- docker build -t docker.local:5000/eliza/console:0.0.1 .
- 2- docker run -d -p 5000:5000 --name registry registry:2
- 3- docker tag a3703d02a199 docker.local:5000/eliza/console:0.0.1
- 4- docker push docker.local:5000/eliza/console:0.0.1
- 5- curl -X GET http://docker.local:5000/v2/eliza/console/tags/list
然后当你使用minikube ssh时,在/ etc / hosts中为docker.local创建一个条目
- docker.local 192.168.0.101
然后curl -X GET http://docker.local:5000 / v2 / eliza / console / tags / list
编辑-1
对于TLS问题,您需要在minikube中停止docker服务
- systemctl stop docker
然后编辑/etc/systemd/system/docker.service.d/10-machine.conf并进行更改
ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock –tlsverify –tlscacert /etc/docker/ca.pem –tlscert /etc/docker/server.pem –tlskey /etc/docker/server-key.pem –label provider=virtualBox –insecure-registry 10.0.0.0/24
至
ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock –tlsverify –tlscacert /etc/docker/ca.pem –tlscert /etc/docker/server.pem –tlskey /etc/docker/server-key.pem –label provider=virtualBox –insecure-registry 10.0.0.0/24 –insecure-registry docker.local:5000 –insecure-registry 192.168.1.4:5000
然后重新加载守护进程并启动docker服务
- systemctl daemon-reload
- systemctl start docker
之后试着拉
- docker pull docker.local:5000/eliza/console:0.0.1
命令应该有效