distribution: Private registry push fail: server gave HTTP response to HTTPS client
My private registry worked well based on docker 1.10.3, but it can’t pull/push images after docker updated to 1.12.0.
I had modified the /etc/sysconfig/docker as:
OPTIONS='--selinux-enabled=true --insecure-registry=myip:5000'
or
OPTIONS='--selinux-enabled=true --insecure-registry myip:5000'
but when I exec pull/push,I got this error:
$ docker pull myip:5000/cadvisor
Using default tag: latest
Error response from daemon: Get https://myip:5000/v1/_ping: http: server gave HTTP response to HTTPS client
when I change back docker to 1.10.3, it still work well as below:
$ docker pull myip:5000/cadvisor
Using default tag: latest
Trying to pull repository myip:5000/cadvisor ...
latest: Pulling from myip:5000/cadvisor
09d0220f4043: Pull complete
a3ed95caeb02: Pull complete
151807d34af9: Pull complete
14cd28dce332: Pull complete
Digest:
sha256:33b6475cd5b7646b3748097af1224de3eee3ba7cf5105524d95c0cf135f59b47
Status: Downloaded newer image for myip:5000/cadvisor:latest
As suggested by RichardScothern, some relative informations are listed below:
docker version
Client:
Version: 1.12.0
API version: 1.24
Go version: go1.6.3
Git commit: 8eab29e
Built:
OS/Arch: linux/amd64
Server:
Version: 1.12.0
API version: 1.24
Go version: go1.6.3
Git commit: 8eab29e
Built:
OS/Arch: linux/amd64
docker info
Containers: 4
Running: 1
Paused: 0
Stopped: 3
Images: 241
Server Version: 1.12.0
Storage Driver: devicemapper
Pool Name: docker-253:0-6809-pool
Pool Blocksize: 65.54 kB
Base Device Size: 107.4 GB
Backing Filesystem: xfs
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 5.459 GB
Data Space Total: 107.4 GB
Data Space Available: 34.74 GB
Metadata Space Used: 9.912 MB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.138 GB
Thin Pool Minimum Free Space: 10.74 GB
Udev Sync Supported: true
Deferred Removal Enabled: false
Deferred Deletion Enabled: false
Deferred Deleted Device Count: 0
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
WARNING: Usage of loopback devices is strongly discouraged for production use. Use '--storage-opt dm.thinpooldev' to specify a custom block storage device.
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Library Version: 1.02.107-RHEL7 (2016-06-09)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: host overlay null bridge
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: seccomp
Kernel Version: 3.10.0-229.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 24
Total Memory: 62.39 GiB
Name: server_3
ID: TITS:BL4B:M5FE:CIRO:5SW6:TVIV:HW36:J7OS:WLHF:46T6:2RBA:WCNV
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
File Descriptors: 21
Goroutines: 32
System Time: 2016-08-02T10:33:06.414048675+08:00
EventsListeners: 0
Registry: https://index.docker.io/v1/
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
Insecure Registries:
127.0.0.0/8
docker exec <registry-container> registry -version
registry github.com/docker/distribution v2.2.1
After I restart the docker daemon in debug mode, the daemon logs when reproducing my problem are listed below:
DEBU[0794] Calling POST /v1.24/images/create?fromImage=10.10.10.40%3A5000%2Fcadvisor&tag=latest
DEBU[0794] hostDir: /etc/docker/certs.d/10.10.10.40:5000
DEBU[0794] hostDir: /etc/docker/certs.d/10.10.10.40:5000
DEBU[0794] Trying to pull 10.10.10.40:5000/cadvisor from https://10.10.10.40:5000 v2
WARN[0794] Error getting v2 registry: Get https://10.10.10.40:5000/v2/: http: server gave HTTP response to HTTPS client
ERRO[0794] Attempting next endpoint for pull after error: Get https://10.10.10.40:5000/v2/: http: server gave HTTP response to HTTPS client
DEBU[0794] Trying to pull 10.10.10.40:5000/cadvisor from https://10.10.10.40:5000 v1
DEBU[0794] hostDir: /etc/docker/certs.d/10.10.10.40:5000
DEBU[0794] attempting v1 ping for registry endpoint https://10.10.10.40:5000/v1/
DEBU[0794] Fallback from error: Get https://10.10.10.40:5000/v1/_ping: http: server gave HTTP response to HTTPS client
ERRO[0794] Attempting next endpoint for pull after error: Get https://10.10.10.40:5000/v1/_ping: http: server gave HTTP response to HTTPS client
ERRO[0794] Handler for POST /v1.24/images/create returned error: Get https://10.10.10.40:5000/v1/_ping: http: server gave HTTP response to HTTPS client
DEBU[1201] clean 2 unused exec commands
What’s more, I just run a simple command to launch the private registry for test, anything else is by default:
docker run -d -p 5000:5000 --restart=always --name registry -v 'pwd'/data:/var/lib/registry registry:2
Neither nginx nor proxy is configured. In summary, it is only a quiet sample environment for test.
Hope you guys giving me some suggestions ,thank you!
About this issue
- Original URL
- State: closed
- Created 8 years ago
- Reactions: 36
- Comments: 50 (3 by maintainers)
I get helped from [http://stackoverflow.com/questions/38695515/can-not-pull-push-images-after-update-docker-to-1-12], two steps in total to solve this issue:
{ "insecure-registries":["myregistry.example.com:5000"] }sudo service docker restartI agree with @dmcgowan
but I have no idea about why it only occurred under docker version 1.12. I will keep this issue open in next three days, any comments are welcome.
I’d like to clarify that you should add the
{ "insecure-registries":["myregistry.example.com:5000"] }to/etc/docker/daemon.jsonin the client machine.Same problem here but with Docker for Mac Version 1.12.1-beta26.1 (build: 12100). Solved adding the insecure registry in Docker Mac App preferences. Why this issue is closed?
For Centos 7 and Docker version _17.03.1-ce, build c6d412e_ , just modify ’ /usr/lib/systemd/system/docker.service’, as @saavkaar indicated:
vi /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd --insecure-registry 192.168.127.1:5000
And now reset docker:
systemctl daemon-reload service docker restart
Where 192.168.127.1:5000 if the ‘IP:port’ of the master node where the registry image is running. Apply this modification and the restart in the master node and also in the slaves.
Now start the registry image in the master node: docker run -d -p 5000:5000 --restart=always --name registry -v LOCAL_PATH:/var/lib/registry registry:2
Where LOCAL_PATH is a existent directory in your master node.
Push an image intto your registry before you can pull.
In the master node: docker push 192.168.127.1:5000:/YOUR_IMAGE
Where YOUR_IMAGE is the name of the image that you want distribute.
Now you can pull
In the slaves nodes: docker pull 192.168.127.1:5000/:YOUR_IMAGE
For Mac users, it seems like they added the ability to configure insecure registries in the GUI, via Preferences > Daemon > Insecure registries.
Try adding --insecure-registry option to daemon in /etc/systemd/system/docker.service.d/docker.conf file. Then sudo systemctl daemon-reload And sudo service docker restart
It worked for me
OS: Ubuntu 16.04 Docker: 1.26
For Docker version 18.09.2, I followed https://success.docker.com/article/using-systemd-to-control-the-docker-daemon
[Service] ExecStart= ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry registry:5000
With Docker For Mac, the registries setting doesn’t seems to be very sticky. I originally added my registry as
https://and got this error. I changed the address tohttpand restarted Docker, but the error persisted.After removing the setting altogether, restarting Docker, then adding the setting back and restarting again it stuck and started working. YMMV.
For Docker version 19.03.1 on a Windows 10 machine, this is how I resolved it:
I opened up docker’s settings in the gui:
Clicked on the Daemon section, click on the toggle button Basic to enable Advance mode:
Enter in your config. 😃
@wudiapo135, I did the same per your comments, but still got the same error: Private registry push fail: server gave HTTP response to HTTPS client
My docker version: Docker version 1.12.2, build bb80604
If you are using Docker for Windows with linux containers, the ‘insecure-registries’ setting is here: C:\Program Files\Docker\Docker\resources\linux-daemon-options.json
I’m using Docker for Windows, but I’m not actually using the ‘for Windows’ part. Instead I followed the ‘hyperv’ instructions.
Install docker for windows but uncheck the ‘start at login’ box. Instead, follow the instructions for creating a docker machine using hyperv - https://docs.docker.com/machine/drivers/hyper-v/ . I called mine ‘dockervm’. I also created a virtual switch that is bridged so it has a real (external) IP.
Create a scheduled task to run at startup ‘C:\Program Files\Docker\Docker\resources\bin\docker-machine start dockervm’. Make sure to not use double quotes as there is a bug in the windows 10 task scheduler.
After step 1 your docker machine is running, use ‘docker-machine env dockervm’ to get the environment, and set it in your global environment settings.
After a reboot, your dockervm should be running, and docker ps -a should return results.
Run the registry locally: docker run -d -p 5000:5000 --name registry registry:2
Open ‘Hyper-V Manager’ and select ‘dockervm’ (it should be running). Click ‘Connect…’ under dockervm on the right to open a shell. You should now be at a root shell prompt in your dockervm
From the root shell prompt, cd to /var/lib/boot2docker
vi profile
Add a new line to this part with your registry (my vm’s IP is 192.168.1.24)
EXTRA_ARGS=’ –label provider=hyperv –insecure-registry=192.168.1.24:5000 ’ 8. Restart the dockervm machine in hyperv manager
You should now be able to push to the registry
I had the same problem as here, but with Docker on Windows. Turns out that the file at
C:\ProgramData\docker\config\daemon.jsonisn’t the only source of config here; if I right-click the docker icon in the taskbar and choose Settings…->Daemon and enable advanced config editing, I get a different set of settings.Adding the insecure registry there, not in the
daemon.jsonfile on disk, seems to have solved my problem.Only this worked for me in /etc/docker/daemon.json file : { “insecure-registries” : [“127.0.0.0/8”, “myregistrydomain.com:5000”] }
Execute these commands afterwards : sudo systemctl daemon-reload sudo systemctl restart docker docker info
In the output of “docker info” look for : Insecure Registries: myregistrydomain.com:5000 127.0.0.0/8
Try it out now …
If someone with GitLab CI
docker:dindas a service comes here (as I did), here’s the answer you’re looking for: https://stackoverflow.com/a/50133074 .For future people who had my problem: If you installed docker using
snap(runsnap servicesto check ifdocker.dockerdis listed), you will need to add theinsecure-registriesentry to/var/snap/docker/current/config/daemon.json, not the default config location.Solution : If you want to pull/push image on particular host let say 10.20.30.120 from private registry that you hosted on another node then
1.go to /etc/hosts of your host and gave same domain name to this ip 10.20.30.120 like - 10.20.30.120 myregistry.local.com
2.go to /etc/docker/daemon.json of you hosts note: if daemon.json not present, create it inside /etc/docker/
3.open daemon.json and write following lines - { “insecure-registries”: [“myregistry.local.com:5000”] }
4.Restart docker service docker stop service docker start
5.try to pull image using for eg : docker pull “myregistry.local.com:5000/username/imagename” that’s it!
I already config the “–insecure-registry localhost:5000” in
/etc/sysconfig/dockerand “systemctl restart docker”. See below:But, still got errors:
Unable to connect to the server: http: server gave HTTP response to HTTPS client. Anyone know how to solve it? Thanks!ubuntu Edit configuration file
/etc/systemd/system/multi-user.target.wants/docker.serviceaddExecStart=/usr/************* --insecure-registry yourip:5000Also you can install haproxy and add into config:
then you don’t need
--insecure-registryflag…Please follow these instructions to help us diagnose your issue
docker versiondocker infodocker exec <registry-container> registry -version-Dto the daemon launch arguments)