我在我的服务器上安装了一个 Docker 注册表,如下所示;
docker run -d -p 5000:5000 --name registry registry:2
所以在那之后我将 Alpine 图像推送到那个注册表。
docker pull alpine
docker image tag alpine localhost:5000/alpinetest
docker push localhost:5000/alpinetest
所以问题是我想从另一台服务器访问这个图像。
所以我可以从客户端运行下面的命令到 Docker 注册表的服务器;
user@clientserver ~
$ curl 10.10.2.18:5000/v2/_catalog
{"repositories":["alpinetest"]}
那么我怎样才能从另一个“客户端服务器”中提取这个“Alpinetest”图像呢?
例如下面的命令不起作用;
user@clientserver ~
$ docker pull 10.10.2.18:5000/alpinetest:latest
Using default tag: latest
Error response from daemon: Get "https://10.10.2.18:5000/v2/": http: server gave HTTP response to HTTPS client
谢谢!
在要拉取镜像的机器上,创建或编辑/etc/docker/daemon.json 并输入:
{
"insecure-registries": ["10.10.2.18:5000"]
}
然后运行:
sudo systemctl restart docker
请注意注册表就像它所说的那样不安全。当通过 Internet 或在您无法完全控制的任何其他环境中访问注册表时,不应使用此设置。但这对于本地测试来说绝对不错。
我不知道为什么我在创建/etc/docker/daemon.json 文件后无法重启docker daemon。但是我从这个 manual 中得到了提示,可以将我的私有注册表注册为 docker 的不安全注册表。
#If the directory does not exist, create it with mkdir command.
cd /etc/systemd/system/docker.service.d
sudo vi docker-options.conf
并为守护进程添加环境变量。
Environment="DOCKER_OPTS=--insecure-registry=<your.registry:port>"
刷新更改并重新启动守护进程。
sudo systemctl daemon-reload
sudo systemctl restart docker