我在机器上安装了docker,并且在其中安装了docker的minikube上,所以可能我有两个在不同VM上运行的docker实例
我建立一个图像并对其进行标记,然后将其推入本地注册表,并成功将其推入,我也可以从注册表中将其拉出,也可以在运行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)无法连接到127.0.0.1端口5000:连接被拒绝
所以我可以从我的机器上访问映像注册表,但不能从minikube访问映像注册表,这在我使用minikube上的Kubernetes部署此映像并由于无法连接到http://127.0.0.1:5000而使部署失败时给我带来了麻烦
您能帮我配置minikube以查看我的本地注册表,以便解决我的问题,然后我就可以使用kubernetes成功将映像部署到minikube吗?
更新
我正在使用此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
当我运行下一个命令以应用更改时
须藤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描述pod tripbru-console-1655054400-x3g87
我在描述结果中找到了下一条消息
来自守护程序的错误响应:{“ message”:“获取 https://docker.local:5000 / v1 /
_ping
:拨打tcp:在10.0.2.3:53上查找docker.local:读取udp
10.0.2.15:57792-\u003e10 .0.2.3:53:I / O超时“}
并且我在minikube / etc / hosts中配置了 docker.local xxx.xxx.xx.4
,所以我不知道10.0.2.3:53和10.0.2.15:57792的来源。
所以我也该如何解决这个问题。
谢谢 :)
问题是您的想法可以127.0.0.1
在任何地方使用。错了
因此,如果您的计算机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在该机器内部无法访问注册表。
我通常解决此问题的方法是在本地和其他VM内使用主机名。
因此,在您的计算机上创建一个条目 /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
,使一个条目docker.local
中/etc/hosts
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守护程序-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-不安全的注册表10.0.0.0/24
至
ExecStart = / usr / bin / docker守护程序-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-
不安全注册10.0.0.0/24-不安全注册docker.local:5000-不安全的注册表192.168.1.4:5000
然后重新加载守护程序并启动docker服务
systemctl daemon-reload
systemctl start docker
之后尝试拉
docker pull docker.local:5000/eliza/console:0.0.1
命令应该起作用
我觉得自己很蠢。我希望K8s从本地注册表中拉出Docker图像,以确保我的开发周期尽可能快。 我已经按照说明设置了本地注册表,并且正在使用一个不安全的注册表。我已经向它推送了图像,并通过使用VS代码的Docker扩展查看注册表内部来确认它们位于注册表中: 我真的不知道是使用、还是,所以我都使用了这三种方法。
我在Linode上有一个K8s集群和另一个用于操作的VM。 我已经安装了Docker 注意:我还没有在这个虚拟机上安装迷你库贝。 我可以构建我的映像,但无法将其从本地注册表拉到k8s pod。 以下是我已经做过的事情 创建docker镜像并将其推送到本地注册表 从图像中运行docker容器,但不会在K8s中被拉入 创建“regcred”secret并在部署yaml中使用它 创建映像并使用VM的IP
我创建了一个docker映像,并将其推入(标记然后推入)本地不安全的docker-registry v2,该v2运行在192.168.99.100:5000/image/name上。 在VM内部的/var/lib/boot2docker/profile上,我向EXTRA_ARGS添加了标志 。 &从在Docker(VM)中运行良好。 _catalog可以从邮递员:获得注册表中的图像。 我将使用以下
问题内容: 如何获得注册表中存在的Docker映像的最新创建日期?最近,我们遇到一个问题,就是我们的某些集群从属服务器上的Docker镜像没有自动拉出,并且该项目在非常陈旧的容器环境中运行。因此,我希望每天运行一次cron脚本,以检查提取的Docker映像是否比注册表Docker映像早24小时。 问题答案: 我知道的最简单的方法是编写一个简单的脚本,该脚本使用Docker Registry RES
我无法将docker映像推送到低于错误的工件注册表 登录和拉取工作正常 詹金斯档案: Dockerfile: 我不确定这是怎么回事。我可以在jenkins从属节点上手动推送图像。但使用詹金斯会产生错误 我构建工作的日志 这是我的构建日志中的内容。
我无法将docker映像推送到heroku注册表。 根据docker的说法,我已成功登录: 在那之后,我运行了,我得到了一些令人困惑的错误,说我试图推送到一个不安全的repo,而de-output中的url看起来是安全的(以https开头)。我做错了什么? 我正在使用以下jib配置: jib的Maven输出:build wiht-X: