Charts: [stable/docker-registry] Docker-registry doesn't work as expected

Created on 11 Dec 2017  路  8Comments  路  Source: helm/charts

Is this a request for help?:
Yes


Is this a BUG REPORT or FEATURE REQUEST? (choose one):
Bug report

Version of Helm and Kubernetes:
Helm:

$ helm version
Client: &version.Version{SemVer:"v2.7.2", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.7.2", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"}

Kubernetes:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.0", GitCommit:"d3ada0119e776222f11ec7945e6d860061339aad", GitTreeState:"clean", BuildDate:"2017-06-29T23:15:59Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0", GitCommit:"0b9efaeb34a2fc51ff8e4d34ad9bc6375459c4a4", GitTreeState:"clean", BuildDate:"2017-11-29T22:43:34Z", GoVersion:"go1.9.1", Compiler:"gc", Platform:"linux/amd64"}

Which chart:
stable/docker-registry-1.0.0

What happened:
Running the docker push command (below) results in the following error:

$ docker push localhost:8080/hello-world
The push refers to a repository [localhost:8080/hello-world]
Get http://localhost:8080/v2/: dial tcp 127.0.0.1:8080: getsockopt: connection refused

I'm not sure how to properly use this. Anything I try seems to result in "connection refused" errors. Adding 127.0.0.1/8 to Docker's insecure registries list didn't seem to fix it.

What you expected to happen:

  1. I'm not sure if I'm missing a step / doing something wrong or if something is broken in this chart - it would be nice if the README included a minimal example of something that is expected to work, so I can know if the issue is on my end.
  2. I would expect that when I follow the instructions below, I should be able to docker push to localhost:8080

How to reproduce it (as minimally and precisely as possible):

  1. helm init
  2. helm install stable/docker-registry
  3. Run the instructions listed when chart is installed:
export POD_NAME=$(kubectl get pods --namespace default -l "app=docker-registry,release=musty-marmot" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl port-forward $POD_NAME 8080:5000
  1. docker pull hello-world
  2. docker tag hello-world localhost:8080/hello-world
  3. docker push localhost:8080/hello-world

Anything else we need to know:
This is running on a minikube cluster (minikube version: v0.24.1)

I have GlobalProtect VPN running, though disabling it doesn't seem to fix the issue.

I'm using git-bash on Windows.

Here is the output of some curl commands while port-forwarding is enabled:

$ curl localhost:8080/

$ curl localhost:8080/asdf
404 page not found

$ curl localhost:8080/v2/
{}
lifecyclstale

Most helpful comment

I also have this problem, plus the README isn't very helpful...

I first started with the default config then switched to nodePort with:

helm install stable/docker-registry --set secrets.htpasswd=htpasswd,service.type=NodePort,service.nodePort=30001

but I cannot login or push anything :(

docker tag image 172.17.4.87:30001/image
docker push 172.17.4.87:30001/image

The push refers to a repository [172.17.4.87:30001/image]
Get https://172.17.4.87:30001/v1/_ping: http: server gave HTTP response to HTTPS client

How is this supposed to work?

All 8 comments

I'm facing the same issue here - I was using the incubator registry before, which was available at port 30400 (NodePort), but according to another issue (https://github.com/kubernetes/charts/issues/2898) that has been broken and changed to 5000?

The incubator version worked fine for me before. Now I'm also unable to push/pull images from the stable registry. What's going on here?

@andrew-dinunzio - I will try to resolve this on my end and update here.. if you found something on your end, that would be great to know.

Edit: as described in the other issue regarding the registry - my workaround is to use the old incubator version: helm install incubator/docker-registry --version 0.2.2.

I ran into the same issue. Using an old version is not possible since the docker-registry moved to stable. Any work arounds anyone? Any idea?

Sorry I haven't gotten to this yet.
I will make some time to look into it.

@jonathanschwarze you can still access the old version with helm:

鈺攢 rwenzel@Robins-MacBook-Pro  ~  
鈺扳攢$ helm inspect incubator/docker-registry --version 0.2.2
appVersion: "2"
description: private docker registry
keywords:
- docker
- registry
maintainers:
- email: [email protected]
  name: sbezverk
- email: [email protected]
  name: Andrey Arapov
name: docker-registry
version: 0.2.2

---
nodePort: 30400
initialLoad: false
replicas: 1
distro:
type:
branch:
initImage: centos
initImageVersion: latest
registryImage: registry
registryImageVersion: 2
tarballURL:
persistentVolume:
  enabled: false
  accessModes:
    - ReadWriteOnce
  existingClaim: ""
  size: 20Gi
  ## docker-registry data Persistent Volume Storage Class
  ## If defined, storageClassName: <storageClass>
  ## If set to "-", storageClassName: "", which disables dynamic provisioning
  ## If undefined (the default) or set to null, no storageClassName spec is
  ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
  ##   GKE, AWS & OpenStack)
  ##
  storageClass: "-"
  annotations: {}

I also have this problem, plus the README isn't very helpful...

I first started with the default config then switched to nodePort with:

helm install stable/docker-registry --set secrets.htpasswd=htpasswd,service.type=NodePort,service.nodePort=30001

but I cannot login or push anything :(

docker tag image 172.17.4.87:30001/image
docker push 172.17.4.87:30001/image

The push refers to a repository [172.17.4.87:30001/image]
Get https://172.17.4.87:30001/v1/_ping: http: server gave HTTP response to HTTPS client

How is this supposed to work?

I was getting the same error on Windows 10 using Docker Kubernetes. I fixed it by using the internal docker DNS host.docker.internal and adding to insecure registries. The internal DNS resolved the connection refused issue. And adding to insecure registries resolve the HTTP response to HTTPS client issue.

Steps:

Add to insecure registries in the docker daemon settings:

{
  "registry-mirrors": [],
  "insecure-registries": [
    "host.docker.internal:5000"
  ],
  "debug": true,
  "experimental": true
}

Forward the port for the registry pod:

$ kubectl port-forward $PODNAME 5000

Test an image.

位  docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
75a0e65efd51: Pull complete
Digest: sha256:d21b79794850b4b15d8d332b451d95351d14c951542942a816eea69c9e04b240
Status: Downloaded newer image for busybox:latest
位  docker tag busybox host.docker.internal:5000/busybox



md5-ec2fd3a96c29255b346ebc34e81a4cb6



位  docker push host.docker.internal:5000/busybox
The push refers to repository [host.docker.internal:5000/busybox]
8e9a7d50b12c: Pushed
latest: digest: sha256:1bd6df27274fef1dd36eb529d0f4c8033f61c675d6b04213dd913f902f7cafb5 size: 527

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Any further update will cause the issue/pull request to no longer be considered stale. Thank you for your contributions.

This issue is being automatically closed due to inactivity.

Was this page helpful?
0 / 5 - 0 ratings