kubernetes无法从localhost注册表运行docker镜像

时间:2017-06-28 18:22:00

标签: docker kubernetes docker-registry kubectl

我正在尝试使用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"}

1 个答案:

答案 0 :(得分:0)

问题是kubernetes试图在其自己的容器中解析localhost

要解决此问题,您需要使kubernetes可以访问注册表。这可以通过多种方式完成,但是其中之一是在kubernetes内部运行注册表 ,然后提供代理,以便可以在外部进行访问。

此过程在此处进行了更详细的描述:https://blog.hasura.io/sharing-a-local-registry-for-minikube-37c7240d0615

重要步骤如下:

  
      
  1. 在minikube上创建注册表
  2.   
     

kubectl create -f kube-registry.yaml

(可在此处找到{kube-registry.yaml:https://gist.github.com/coco98/b750b3debc6d517308596c248daf3bb1

  
      
  1. 将主机端口5000映射到minikube注册表容器
  2.   
     

kubectl port-forward --namespace kube-system \ $(kubectl get po -n kube-system | grep kube-registry-v0 | \ awk '{print $1;}') 5000:5000