Docker存储库服务器向HTTPS客户端提供HTTP响应

时间:2018-04-05 13:48:05

标签: windows docker docker-toolbox

我使用Docker工具箱用于Windows,我试图从此文档中运行私有docker注册表https://docs.docker.com/registry/deploying/

但这对我不起作用。 在此之后出错:

$ docker pull 192.168.99.100:5000/my-ubuntu

错误

$ docker pull 192.168.99.100:5000/image
Using default tag: latest
Error response from daemon: Get https://192.168.99.100:5000/v2/: http: server gave HTTP response to HTTPS client

我认为我的泊坞客户端中存在错误。

有关信息,这是我的泊坞窗信息

Containers: 6
 Running: 4
 Paused: 0
 Stopped: 2
Images: 19
Server Version: 17.06.0-ce
Storage Driver: aufs
 Root Dir: /mnt/sda1/var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 144
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: cfb82a876ecc11b5ca0977d1733adbe58599088a
runc version: 2d41c047c83e09a6d61d464906feb2a2f3c52aa4
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.4.74-boot2docker
Operating System: Boot2Docker 17.06.0-ce (TCL 7.2); HEAD : 0672754 - Thu Jun 29 00:06:31 UTC 2017
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 995.8MiB
Name: default
ID: ZMCX:NXC7:3BSV:ZNWV:MDZO:FW26:6MX5:UWI6:NVRL:XP56:AKGC:Z3TW
Docker Root Dir: /mnt/sda1/var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 47
 Goroutines: 56
 System Time: 2018-04-05T13:43:42.856720067Z
 EventsListeners: 0
Username: kacalek
Registry: https://index.docker.io/v1/
Labels:
 provider=virtualbox
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

如果我尝试使用Mac,那么每个人都很完美。

你知道解决这个错误怎么样?

非常感谢您的每一个答案!

12 个答案:

答案 0 :(得分:11)

如果您使用Windows:

  1. 在启动菜单中,右键单击docker桌面之一,然后选择设置
  2. 选择“泊坞窗引擎”标签,然后按图片"insecure-registries": [],进行更改 "insecure-registries": ["192.168.99.1:5000"],

Docker engine tab

  1. 单击“应用并重新启动”按钮
  2. 重新启动docker之后,要检查是否已应用修改,请打开cmd控制台并执行以下命令:docker system info,然后检查“不安全注册表”部分中是否存在192.168.99.1:5000

答案 1 :(得分:4)

如果您在Windows上使用 Docker Desktop

  • 单击任务栏中的docker whale图标

  • 出现一个菜单,单击“设置”

  • 出现一个弹出窗口,单击“守护程序”

  • 在“不安全的注册表”文本区域中输入不安全的注册表

  • 点击应用

作业完成,无需手动编辑任何文件

答案 2 :(得分:2)

仅供参考,“ danday74”中的修复程序也适用于我的MacOS Docker桌面。请注意,它需要重新启动守护程序,这样它将杀死所有正在运行的容器。

答案 3 :(得分:2)

也许有人再次碰到这个问题,@user674669 也应该提到 sudo /etc/docker/daemon.json 应该设置在想要连接到有问题的 Docker 注册表的 client machine 上。

这允许客户端连接到服务器

答案 4 :(得分:1)

看起来你还没有设置Docker Daemon。请注意以下几行:

Insecure Registries:
 127.0.0.0/8

尝试将此行添加到Docker的daemon.json文件中,然后重新启动Docker守护程序:

"insecure-registries":["192.168.99.100:5000"]

答案 5 :(得分:1)

如果您在 Windows 机器上使用 minikube 以及 minikube 插件注册表。

1.找到注册IP。它将与 minikube IP 相同。

> minikube ip

2.编辑文件:

C:\Users\<username>\.minikube\machines\minikube\config.json

 "InsecureRegistry": [
                "10.96.0.0/12",      // Add coma
                "<minikube IP>:5000" //-> Add this line
            ],
  1. 重启 minikube

    > minikube start

答案 6 :(得分:0)

在CentOS 7.2.1511上,我必须创建一个新文件

/etc/docker/daemon.json 

带有内容

{ "insecure-registries":["host:port"] } 

(主机是托管我的Docker注册表的服务器的主机名,端口是docker注册表可用的端口。在我的情况下,这些是192.168.99.1:50000)

然后通过执行以下操作重启docker daemon:

$ sudo service docker restart

答案 7 :(得分:0)

希望这将对任何有问题的人提供帮助,以解决“不安全的注册表”问题。

添加

{ "insecure-registries":["host:port"] }

/etc/docker/daemon.json

直到我创建文件

,它才对我不起作用

/etc/default/docker

并把线放在

DOCKER_OPTS="--config-file=/etc/docker/daemon.json"

在其中,然后使用

重新启动docker守护进程

sudo systemctl stop dockersudo systemctl start docker

由于某种原因,仅执行sudo systemctl restart docker无效。它引发了有关尝试快速重新启动服务的错误。

对于["host:port"],我也使用Docker注册表的IP地址而不是主机名,因为我没有DNS或主机文件设置,无法通过主机名查找注册表。

这使我彻底疯了,直到我偶然发现了/etc/default/dockerhere

我是Docker的新手,所以我不知道这是否是新要求,因为回答了这篇初始文章,或者在我第一次设置注册表时是否错过了其他内容。尽管我所做的只是遵循Docker网站本身上的最新文档。

答案 8 :(得分:0)

除了更改 daemon.json 之外,我还必须rm -Rf ~/.docker

信用:https://github.com/moby/moby/issues/28321#issuecomment-638307611

答案 9 :(得分:0)

我在 Ubuntu 中安装了新版本的 Docker,但没有一种方法有效,所以我安装了旧版 docker

sudo apt-get install docker-ce=5:19.03.12~3-0~ubuntu-focal

并正常工作

答案 10 :(得分:0)

这是“测试不安全的注册表”的官方页面解释。 解决方案:

  1. 添加“insecure-registries”(此线程中的主要解决方案。)
  2. 使用自签名证书

https://docs.docker.com/registry/insecure/

答案 11 :(得分:0)

necron9x11 的回答对我有用。请注意,如果您正在使用 Docker-in-Docker 部署,例如容器化 Jenkins (https://www.jenkins.io/doc/book/installing/docker/),则可以将“daemon.json”和“docker”文件添加为映像构建的一部分。这样,两者都包含在支持 Jenkins 映像的可部署 dind 映像中。只需使用 Dockerfile 在同一目录中创建两个文件:

enter image description here

那么Doc​​kerfile的内容是:

FROM docker:dind
USER root
ADD docker /etc/default/docker
ADD daemon.json /etc/docker/daemon.json

最后像往常一样构建和部署:

docker build -f Dockerfile.dind -t dind-custom .
docker run ...
   (name + env + volume + etc)
   dind-custom

现在您的 dind 容器可以访问 daemon.json 中指定为 ["host:port"] 的不安全注册表。