更新 docker 至 1.12 后无法 pull/push 图片

Can not pull/push images after update docker to 1.12

私有注册表基于docker 1.10.3 运行良好,但在 docker 更新到 1.12.0 后我无法 pull/push 图片。

我将 /etc/sysconfig/docker 修改为:

OPTIONS='--selinux-enabled=true --insecure-registry=myip:5000'

OPTIONS='--selinux-enabled=true --insecure-registry myip:5000'

但是当我执行 pull/push 时,我得到了这个错误:

$ 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

当我改回 docker 到 1.10.3 时,它仍然运行良好,如下所示:

$ 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/cadvisor:latest

部分相关信息如下:

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

在调试模式下重新启动 docker 守护进程后,重现问题时守护进程的日志如下:

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

更重要的是,我只是运行一个简单的命令来启动私有注册中心进行测试,其他都是默认的:

docker run -d -p 5000:5000 --restart=always --name registry -v 'pwd'/data:/var/lib/registry registry:2

没有配置代理。综上所述,只是一个安静的测试样例环境。

我遇到了同样的问题。

这对我有帮助:

  • 在客户端机器上/etc/docker/daemon.json创建或修改

    { "insecure-registries":["myregistry.example.com:5000"] }

  • 重新启动 docker 守护程序

    sudo /etc/init.d/docker restart

如果您正在使用 Windows 并且出现此错误,您需要在此处创建一个文件:"C:\ProgramData\docker\config\daemon.json"

和上面提到的@Bspec 做同样的事情:

{ "insecure-registries":["myregistry.example.com:5000"] }

然后使用 PowerShell 命令重新启动 docker:

Stop-Service docker
Start-Service docker

对于 Windows 用户

在此处添加本地注册表并应用:

对于 Mac 用户: 使用顶部栏中的 (docker) 图标更新 docker 首选项

首选项 -> 守护进程 -> 不安全注册表 [单击 (+) 符号] -> 添加:端口

点击底部的 "Apply & Restart" 按钮

我也有同样的问题并按照以下步骤操作:

1.创建文件

 vi /etc/docker/daemon.json

2。添加以下内容

{
        "insecure-registries":["192.168.1.142:5000"]
 }

3.Restart Docker

service docker restart

修改“/etc/docker/daemon.json”对我不起作用。

如下所示将它放在“/etc/sysconfig/docker”下,有效。

INSECURE_REGISTRY="--不安全注册表 192.168.24.1:8787"

为了推送,将ip添加到客户端的不安全注册表(例如Windows)

拉取,添加到服务器端(本例Ubuntu)

vim /etc/docker/daemon.json

然后重启Docker.

None 的解决方案适用于 Ubuntu 18.04,因此请花一些时间找出根本原因。

解决问题的步骤

sudo vi /lib/systemd/system/docker.service
# ExecStart=dockerd .... --insecure-registry=192.168.99.100:5000
sudo systemctl stop docker.service
sudo systemctl daemon-reload
sudo systemctl start docker.service

发生了什么问题?

我建议检查 dockerd 选项的确切配置位置,无论您使用 Linux 发行版:

sudo find /etc /lib -name 'docker*' | while read -r line; do grep dockerd $line /dev/null; done

本地首次测试

docker push localhost:5000/<ImageName>

如果 docker 推送完成,转到另一台服务器并执行:

sudo nano /etc/docker/daemon.json


{"insecure-registries" : ["<HostName or IP Address registry server>:5000"]}

保存并...

下一个

sudo systemctl daemon-reload

sudo service docker restart

不错! 现在 docker 在另一台服务器上推送:

docker tag <image id> <HostName or IP Address registry server>:5000/<ImageName>
docker push <HostName or IP Address registry server>:5000/<ImageName>

尽情享受吧。