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 docker
和 sudo systemctl start docker
.
出于某种原因,只做 sudo systemctl restart docker
是行不通的。它引发了关于尝试快速重启服务的错误。
同样对于 ["host:port"]
,我使用了我的 Docker 注册表的 IP 而不是主机名,因为我没有 DNS 或主机文件设置,无法通过主机名找到注册表。
这让我非常抓狂,直到我偶然发现 /etc/default/docker
位 here。
我是 Docker 的新手,所以我不知道这是否是新要求,因为最初的 post 已得到答复,或者我在第一次设置注册表时是否遗漏了其他内容.尽管我所做的只是遵循 Docker 网站本身的当前文档。
如果您使用 Docker 桌面 for Windows:
单击任务栏中的 docker 鲸鱼图标
出现一个菜单,点击设置
出现弹窗,点击Daemon
在 "Insecure registries" 文本区域输入您的不安全注册表
点击应用
任务完成,无需手动编辑任何文件
如果你使用windows:
- 在启动菜单中,右键单击 docker 桌面,然后 select 设置
- select“docker引擎”选项卡,如图
"insecure-registries": [],
"insecure-registries": ["192.168.99.1:5000"],
- 点击应用并重启按钮
- 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
],
重启 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
并正常工作
这是“测试不安全注册表”的官方页面说明。
解决方案:
- 添加“不安全注册表”(此线程中的主要解决方案。)
- 使用自签名证书
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"
],
...
}
已知问题的文档:
我为 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 docker
和 sudo systemctl start docker
.
出于某种原因,只做 sudo systemctl restart docker
是行不通的。它引发了关于尝试快速重启服务的错误。
同样对于 ["host:port"]
,我使用了我的 Docker 注册表的 IP 而不是主机名,因为我没有 DNS 或主机文件设置,无法通过主机名找到注册表。
这让我非常抓狂,直到我偶然发现 /etc/default/docker
位 here。
我是 Docker 的新手,所以我不知道这是否是新要求,因为最初的 post 已得到答复,或者我在第一次设置注册表时是否遗漏了其他内容.尽管我所做的只是遵循 Docker 网站本身的当前文档。
如果您使用 Docker 桌面 for Windows:
单击任务栏中的 docker 鲸鱼图标
出现一个菜单,点击设置
出现弹窗,点击Daemon
在 "Insecure registries" 文本区域输入您的不安全注册表
点击应用
任务完成,无需手动编辑任何文件
如果你使用windows:
- 在启动菜单中,右键单击 docker 桌面,然后 select 设置
- select“docker引擎”选项卡,如图
"insecure-registries": [],
"insecure-registries": ["192.168.99.1:5000"],
- 点击应用并重启按钮
- 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
],
重启 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
并正常工作
这是“测试不安全注册表”的官方页面说明。 解决方案:
- 添加“不安全注册表”(此线程中的主要解决方案。)
- 使用自签名证书
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"
],
...
}