【问题标题】:Docker repository server gave HTTP response to HTTPS clientDocker 存储库服务器向 HTTPS 客户端提供 HTTP 响应
【发布时间】:2018-09-15 08:57:08
【问题描述】:

我在 Windows 上使用 Docker 工具箱,我正在尝试从该文档 https://docs.docker.com/registry/deploying/ 运行私有 docker 注册表

但这对我不起作用。 之后的错误:

$ 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 info

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 上尝试,那么everythink 就完美了。

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

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

【问题讨论】:

    标签: windows docker docker-toolbox


    【解决方案1】:

    看起来您没有正确设置 Docker 守护程序。请注意以下几行:

    Insecure Registries:
     127.0.0.0/8
    

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

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

    【讨论】:

    • 谢谢回答。 daemon.json 在哪里?
    • C:\ProgramData\Docker\config
    • 没有退出!我只有“C:\Program Files\Docker Toolbox”
    • 但我在“C:\Users\kacal\.docker”中找到了一些 config.json
    • 我使用 Docker 工具箱,这意味着我有带有一些 linux 的 VirtualBox,其中是 docker-engine(我猜),我在 Windows 上只有 docker 客户端连接到 VirtualBox 中的 linux 中的 docker-engine .
    【解决方案2】:

    在 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
    

    【讨论】:

    • 更新daemon.json后别忘了重启docker服务!!!
    • 但是如何使其安全或使用 https 呢?
    • "systemctl docker reload" 就足够了(而且速度更快)重启会杀死你所有正在运行的东西:)
    【解决方案3】:

    希望这将帮助任何在使用 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 新手,所以我不知道这是否是新要求,因为最初的帖子已得到答复,或者我第一次设置注册表时是否遗漏了其他内容。尽管我所做的只是关注 Docker 站点本身的当前文档。

    【讨论】:

      【解决方案4】:

      如果你使用窗户:

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

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

      【讨论】:

      • 您是如何获得192.168.99.1:5000 值的?
      • 回答你的请求 PAA - 那是他的注册表的 IP 地址和端口 - 默认为 5000。
      【解决方案5】:

      如果您在 Windows 上使用 Docker 桌面

      • 单击任务栏中的泊坞鲸图标

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

      • 出现一个弹出窗口,点击守护进程

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

      • 点击应用

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

      【讨论】:

      • 这也适用于我的 MacOS Docker 桌面。请注意需要重新启动守护程序,因此任何正在运行的容器都将被杀死。
      • 看起来他们从 Windows Docker Desktop 中删除了该功能,就像我点击设置 1 时一样。我没有弹出窗口,2。如果我假设您只是在谈论显示的选项:常规/资源/Docker 引擎/实验功能/Kubernetes/软件更新。 (更新,看起来下面的答案有你看到的图像,你需要进入 Docker 引擎)
      【解决方案6】:

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

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

      【讨论】:

      • 这是关键,它在客户端机器上是必需的,我在服务器机器上做谢谢!
      【解决方案7】:

      如果您在 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

        &gt; minikube start

      【讨论】:

        【解决方案8】:

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

        那么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"] 的不安全注册表。

        【讨论】:

          【解决方案9】:

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

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

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

          【讨论】:

            【解决方案10】:

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

            通过环境变量禁用 Buildkit:
            DOCKER_BUILDKIT=0 docker build -t image_name .
            
            通过 docker daemon 配置文件禁用:
            • 在 Docker 桌面上转到 Settings &gt; 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

            【讨论】:

              【解决方案11】:

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

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

              【讨论】:

                【解决方案12】:

                我在 Ubuntu 中安装了新版本的 Docker,但这些方法都不起作用,所以我安装了旧版 docker

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

                正常工作

                【讨论】:

                  【解决方案13】:

                  我刚刚花了几个小时尝试调试 WSL。事实证明,它结合了 insecure-registreis 正确,但也没有在另一侧设置 DOCKER_TLS_VERIFY。将其设置为 0 或 1 会破坏它,所以我不得不取消设置变量并且它起作用了。

                  【讨论】:

                    【解决方案14】:

                    我也遇到了同样的问题。经过数小时的努力,我发现我需要如下定义不安全的注册表。

                    如果hosts文件映射为192.168.0.xx docker.local 那么 daemon.json 应该有不安全的注册表(在 etc/docker/daemon.json 中)键应该是: ... “不安全的注册表”:[“docker.local:5000”] ... 之前是这样的: ... “不安全的注册表”:[“192.168.0.xx:5000”] ...

                    【讨论】:

                      猜你喜欢
                      • 2020-12-31
                      • 2021-04-19
                      • 2021-04-27
                      • 2020-05-07
                      • 1970-01-01
                      • 2019-12-05
                      • 1970-01-01
                      • 1970-01-01
                      • 2023-03-24
                      相关资源
                      最近更新 更多