我在我的服务器上安装了一个Docker注册表,如下所示;
docker run -d -p 5000:5000 --name registry registry:2
之后,我将Alpine image推送到注册表
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.并输入如下:
{
"insecure-registries": ["10.10.2.18:5000"]
}
,然后运行:
sudo systemctl restart docker
请注意注册表是不安全的,就像它说的那样。当通过internet访问注册表或在您无法完全控制的任何其他环境中访问注册表时,不应使用此设置。但对于本地测试来说,这绝对是很好的。
我不知道为什么我不能在创建/etc/docker/daemon后重新启动docker守护进程json文件。但是我从这本手册中得到了一个提示,可以将我的私人注册表注册为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