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

我使用多克工具箱的窗口,我正在尝试运行私人多克注册参考此文档 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 上试试这个,一切都很完美。

你知道这个错误如何到 解决

非常感谢你的回答!

166878 次浏览

看起来你没有设置好 Docker 守护进程,注意这几行:

Insecure Registries:
127.0.0.0/8

尝试将这一行添加到 Docker 的 daemon.json文件并重新启动 Docker 守护进程:
(Windows 上的 C:\ProgramData\Docker\config\daemon.json,Linux 上的 /etc/docker/daemon.json)

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

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

/etc/docker/daemon.json

里面的东西

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

(主机是托管我的 docker 注册表的服务器的主机名,端口是可以使用 docker 注册表的端口。在我的例子中,这些是192.168.99.1:50000)

然后重新启动 docker 守护进程,方法是:

$ sudo service docker restart

Hopefully this will help anyone having issues getting the insecure-registries fix to work.

添加

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

/etc/docker/daemon.json

直到我创建了这个文件

/etc/default/docker

and put the line

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

然后重新启动 docker 守护进程

sudo systemctl stop dockersudo systemctl start docker

For some reason just doing a sudo systemctl restart docker did not work. It threw an error about trying to restart the service to quickly.

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

这使我绝对疯了,直到我偶然发现了 /etc/default/docker给你

我是新的多克,所以我不知道这是新的要求,因为这最初的职位是回答或如果有别的东西,我错过了当我第一次设置我的注册表。不过我只是关注了 Docker 网站上的最新文档。

如果你在视窗上使用 Docker 桌面:

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

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

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

  • Entry your insecure registry in the "Insecure registries" text area

  • 点击申请

任务完成,不需要手动编辑任何文件

如果你使用窗口:

  1. 在启动菜单中,右键单击 docker 桌面,然后选择设置
  2. 选择“ docker engine”选项卡,并按照图片 "insecure-registries": [],所示进行更改 "insecure-registries": ["192.168.99.1:5000"],

Docker engine tab

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

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

1.Find the registry IP. It will be same as 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

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

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

除了更改守护进程之外,我还要更改 rm -Rf ~/.docker

来源: https://github.com/moby/moby/issues/28321#issuecomment-638307611

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

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

正常工作

Here is an official page explain for "Test an insecure registry". 解决方案:

  1. 添加“不安全注册表”(这个线程中的主要解决方案)
  2. 使用自签名证书

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

necron9x11's answer worked for me. Note that if you're working with a Docker-in-Docker deployment such as containerized Jenkins (https://www.jenkins.io/doc/book/installing/docker/), you can add the "daemon.json" and "docker" files as part of your image build. This way both are included with your deployable dind image supporting the Jenkins image. Just create both files in the same directory with your Dockerfile:

enter image description here

那么 Dockerfile 的内容是:

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”]的不安全注册中心。

我花了好几个小时调试 WSL。结果表明,它结合了不安全注册表的权利,但是在另一端也没有设置 DOCKER _ TLS _ VERIFY。设置为0或1会破坏它,所以我不得不取消变量设置,它工作了。

我也面临着同样的问题。经过几个小时的努力,我发现我需要像下面这样定义不安全的注册表。

如果 hosts 文件映射为192.168.0. xx docker.local then daemon.json should have the insecure registry (in etc/docker/daemon.json) key should be: ... “ security-registries”: [“ docker.local: 5000”] ... Earlier it was like: ... “不安全注册表”: [“192.168.0. xx: 5000”] ...

如果已经启用了 buildkit (在较新的版本中,它似乎是默认启用的) ,并且添加不安全注册表没有修复它,那么您可能需要禁用 buildkit,或者将 http://添加到不安全注册表中的主机名中。

通过环境变量关闭 Buildkit:
DOCKER_BUILDKIT=0 docker build -t image_name .
通过 docker 守护进程配置文件禁用:
  • 在 Docker 桌面上转到 Settings > Docker Engine
    * * 小心输入错误和丢失逗号,因为破坏这个文件将防止 Docker 桌面启动。
{
...
"features": {
"buildkit": false << SET THIS TO FALSE
},
"insecure-registries": [
"hostname:18443",
"hostname:8083"
],
...
}
将 URL 配置为 HTTP:
{
...
"features": {
"buildkit": true
},
"insecure-registries": [
"http://hostname:18443",
"http://hostname:8083"
],
...
}
Documentation of the known issue:

Https://github.com/docker/docker.github.io/blob/62adddbb6b1f8d861c72f6ade2c50977fd57f481/registry/insecure.md#known-issue-on-buildkit

如果您正在使用 Unraid,则在关闭/重新启动循环期间,/etc/docker 中的更改不会持久化。

为了在引导期间创建守护进程文件,我必须在/boot/config/go 中添加3行代码

# Create docker daemon.json
mkdir /etc/docker
echo {\"insecure-registries\": [\"<your-ip>:5000\"]} > /etc/docker/daemon.json

也许有更好的解决办法,但这对我很有效。

http: server gave HTTP response to HTTPS client

为了解决这个问题,我必须在 /etc/containers下编辑 registries.conf并添加 docker 服务器的条目“ Host: Port”

[registries.insecure]
registries = ['host:port']

Then create a file named < strong > docker under < strong >/etc/default adding below line

DOCKER_OPTS="--config-file=/etc/containers/registries.conf"

使用 systemctl reload docker保存文件并重新加载 docker,然后尝试 docker login。

因为这个问题已经得到了回答,但是在某些情况下它不工作,在某些情况下,路径 /etc/docker/下的 Daemon Json工作得很好