文章目录
http:server gave HTTP response to HTTPS client
这个问题,大概是我们经常会遇到的问题
通常是在搭建了私有镜像仓库的情况后,没有启动证书认证的缘故。
常用解决方式
在本地客户端中,打开此文件夹
sudo vi /etc/docker/daemon.json
{
"hosts": ["tcp://xxx.xxx.xxx.xxx:8137", "unix:///var/run/docker.sock"],
"init": true,
"init-path": "/usr/bin/docker-init",
"insecure-registries":["xxx.xxx.xxx.xxx:xxxx"], // 在此处加入自己服务器的域名和仓库地址端口,这里默认是5000端口
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
保持原有ip不动的情况下,在"xxx"下,填入新的ip与仓库地址
重启docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
也可以只在daemo.json里只添加如下参数:
{ "insecure-registries":["127.0.0.1:8877", "127.0.0.11:5000",xxx.xxx.xxx.xxx:xxxx] }
然后重启docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
重启没有报错,docker pull的时候,就可以拉取私有镜像了
非常用解决方式
restart docker启动,因为配置问题重启失败。
配置失败的问题,有很多种情况。
具体可以根据命令提示去排查报错信息。
首先需要检查自己的书写规范是否正确,在确保配置无误的情况下,考虑其他解决方案。
配置仓库信任的方式大致有三种: 1、常用的方式,直接修改daemo.json 2、在docker的启动命令中设置 3、在docker的启动配置文件中设置。
其中,优先级为2>3>1
若2已经失效,则在1,3场景下,是无法配置的。
3场景的修改,需要关注自己的容器配置,这里一般为容器的启动参数
2场景的解决方式
需要查看自己所在环境内是docker还是containerd
docker场景
找到此场景启动的容器,停止,重启启动。
container场景
手动拉取镜像, 绕过信任检测
sudo ctr i pull –plain-http image:tag
修改启动配置,从根本上解决
确定docker设置是采用2场景启动的
# 找到dockerd --iptables=false --insecure-registry=xxx.xxx.xxx.xxx:xxxx
ps aux | grep docker
# 找到一下路径文件,进行修改,追加--insecure-registry参数,wq保存退出
vi /etc/systemd/system/docker.service.d/docker-options.conf
# 重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
3场景的解决方式
在1、2场景下重启均失败的情况下,需要考虑是不是这个问题导致的。
# 找到dockerd进程,观察启动命令是否包含镜像仓库的配置
ps aux | grep docker
# 修改docker.service
vi /usr/lib/systemd/system/docker.service
# 在ExecStart后面追加--insecure-registry
[Service]
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry harbor1.com --insecure-registry harbor2.com
# 重载配置并重启
systemctl daemon-reload && systemctl restart docker
扩展
下面的配置都是在[Service]节点下的ExecStart属性后面加参数值,docker.service文件被修改后请执行systemctl daemon-reload && systemctl restart docker,如果配置未生效,请执行systemctl status docker查看日志分析
开启远程API访问端口
添加-H 0.0.0.0:2375,端口可以随意指定,修改后的ExecStart如下:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H 0.0.0.0:2375
访问http://127.0.0.1:2375/info 进行验证
修改bridge网络的ip段
执行docker network inspect bridge命令可以发现bridge网络默认的IP段是172.17.0.0/16,添加–bip 10.0.0.1/16修改默认IP段
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --bip 10.0.0.1/16
启动一个nginx容器进行验证
docker run -dP --name nginx nginx
docker inspect --format '{{ .NetworkSettings.IPAddress }}' nginx
docker rm -f nginx
配置dns
以下示例配置114.114.114.114和8.8.8.8两个dns服务器地址
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock \
--dns 114.114.114.114 \
--dns 8.8.8.8
启动一个alpine容器镜像验证resolv.conf配置文件是否成功修改
docker run --rm alpine cat /etc/resolv.conf
注:更多配置详情可以参考这里>>>