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

Docker repository server gave HTTP response to HTTPS client

我为 windows 使用 Docker 工具箱,我正在尝试 运行 私有 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

我认为错误是在我的 docker 客户端中。

有关信息,这是我的 docker 信息

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 那么一切都是完美的。

你知道这个错误如何解决吗?

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

您似乎没有正确设置 Docker 守护进程。注意这几行:

Insecure Registries:
 127.0.0.0/8

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

"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

希望这能帮助任何在 insecure-registries 修复工作时遇到问题的人。

添加

{ "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 的新手,所以我不知道这是否是新要求,因为最初的 post 已得到答复,或者我在第一次设置注册表时是否遗漏了其他内容.尽管我所做的只是遵循 Docker 网站本身的当前文档。

如果您使用 Docker 桌面 for Windows:

  • 单击任务栏中的 docker 鲸鱼图标

  • 出现一个菜单,点击设置

  • 出现弹窗,点击Daemon

  • 在 "Insecure registries" 文本区域输入您的不安全注册表

  • 点击应用

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

如果你使用windows:

  1. 在启动菜单中,右键单击 docker 桌面,然后 select 设置
  2. select“docker引擎”选项卡,如图"insecure-registries": [], "insecure-registries": ["192.168.99.1:5000"],

  1. 点击应用并重启按钮
  2. docker 重启后,要检查是否应用了修改,打开 cmd 控制台并执行此命令:docker system info 然后检查 192.168.99.1:5000 是否存在于“insecure-registries”节

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

1.Find 注册表 IP。它将与 minikube IP 相同。

> minikube ip

2.Edit 文件:

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 除了更改 daemon.json。

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

我在 Ubuntu 中安装了新版本的 Docker 并且 none 的方法有效,所以我安装了旧版本 docker

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

并正常工作

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

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

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

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

相同的目录中创建这两个文件

那么Docker文件的内容是:

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 那么 daemon.json 应该有不安全的注册表(在 etc/docker/daemon.json 中)密钥应该是: ... “不安全的注册表”:[“docker.local:5000”] ... 早些时候它是这样的: ... “不安全的注册表”:[“192.168.0.xx:5000”] ...

如果启用了 buildkit(在较新的版本中它似乎默认启用)并且添加 insecurite-registries 没有解决它,您可能需要禁用 buildkit,或添加 http://到 insecure-registries.

中的主机名
通过环境变量禁用 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"
  ],
  ...
}
已知问题的文档:

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