我正在尝试使用kubernetes运行一个docker容器
cat /path/to/docker/docker.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --live-restore=true --iptables=false --log-opt max-size=100m --log-opt max-file=3 --bip ${FLANNEL_SUBNET} --mtu ${FLANNEL_MTU}
DOCKER_OPTS="--insecure-registry localhost:5000"
我想创建一个本地注册表,因为我不希望我的图像驻留在公共存储库上。
docker run -d -p 5050:5000 --restart=always --name registry registry:2
然后我只是建立我的形象
docker build -f "Dockerfile" -t localhost:5050/myImage .
docker push localhost:5050/myImage
这两项工作只是为了确定,我也可以运行图像
docker run -d -p 5000:5000 --name myImage --hostname myImage -v /some/path/to/mount:/some/path/to/mount localhost:5050/myImage
现在我尝试做
kubectl run myImage --image=localhost:5050/myImage --port=5050
但是
kubectl get pods
NAME READY STATUS RESTARTS AGE
myImage-4227318852-r8z9n 0/1 ErrImagePull 0 6s
kubectl logs myImage-4227318852-r8z9n
Error from server (BadRequest): container "myImage" in pod "myImage-4227318852-r8z9n" is waiting to start: trying and failing to pull image
我做错了什么?
docker version
Client:
Version: 17.05.0-ce
API version: 1.29
和
kubectl version
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.6", GitCommit:"114f8911f9597be669a747ab72787e0bd74c9359", GitTreeState:"clean", BuildDate:"2017-03-28T13:36:31Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.6", GitCommit:"114f8911f9597be669a747ab72787e0bd74c9359", GitTreeState:"clean", BuildDate:"2017-03-28T13:36:31Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
答案 0 :(得分:0)
问题是kubernetes试图在其自己的容器中解析localhost
。
要解决此问题,您需要使kubernetes可以访问注册表。这可以通过多种方式完成,但是其中之一是在kubernetes内部运行注册表 ,然后提供代理,以便可以在外部进行访问。
此过程在此处进行了更详细的描述:https://blog.hasura.io/sharing-a-local-registry-for-minikube-37c7240d0615
重要步骤如下:
- 在minikube上创建注册表
kubectl create -f kube-registry.yaml
(可在此处找到{kube-registry.yaml:https://gist.github.com/coco98/b750b3debc6d517308596c248daf3bb1)
- 将主机端口5000映射到minikube注册表容器
kubectl port-forward --namespace kube-system \ $(kubectl get po -n kube-system | grep kube-registry-v0 | \ awk '{print $1;}') 5000:5000