我如何让docker机器从主机获取图像然后再自己拉取任何图像?

Nur*_*ony 5 docker docker-compose docker-machine

我发现每次我在新机器上创建一个容器时,它都会从docker hub提取图像。我已经在网上搜索过,但没有找到格式正确的结果。我已经从主机上的集线器中提取了图像。现在我的问题是如何使docker机器在将任何图像拉入virtualbox之前检查主机图像位置?我希望计算机共享并保存主机默认位置中的图像,这样我就可以在多台计算机之间共享图像,而不必从每台计算机的注册表中提取图像

Von*_*onC 3

机器,即新虚拟机中,docker确实会将镜像从docker hub拉取到本地虚拟机docker镜像存储路径:

/var/lib/docker/images
Run Code Online (Sandbox Code Playgroud)

每台新机器都有自己的图像缓存。

如果您想在计算机之间共享图像,您需要一个充当您的私人注册表,并拥有自己的证书来启用 https 访问。
请参阅此处的示例,用于gen_ssl_key_and_crt.sh生成密钥/证书:

./gen_ssl_key_and_crt.sh
if [[ "$(docker inspect -f {{.State.Running}} registry 2> /dev/null)" == "" ]]; then
    docker run -d -p 5000:5000 --restart=always --name registry \
        -v $(pwd)/certs:/certs \
        -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/crt \
        -e REGISTRY_HTTP_TLS_KEY=/certs/key \
        registry:2
fi
Run Code Online (Sandbox Code Playgroud)

然后你的另一台机器可以从该注册表中拉取,这要快得多,并且只会从 docker hub 中拉取一次,第一次看到它自己的注册表中没有该映像时。

例如

if [[ "$(docker images -q kv:5000/b2d/git:2.8.1 2> /dev/null)" == "" ]]; then
    docker pull kv:5000/b2d/git:2.8.1
fi
Run Code Online (Sandbox Code Playgroud)

有关更简单的解决方法,请参阅: