【问题标题】:How can I make docker machine to get images from host before pulling any image for itself?在为自己拉取任何图像之前,如何让 docker 机器从主机获取图像?
【发布时间】:2016-09-03 13:01:10
【问题描述】:

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

【问题讨论】:

  • 您使用的是什么操作系统?图像存储在机器中,而不是主机中,因此没有主机图像位置。
  • @warmoverflow 是的,我知道。但我希望机器从主机默认位置共享和保存图像,以便我可以在多台机器之间共享图像,而无需从每台机器的注册表中提取图像。也更新了问题

标签: docker docker-compose docker-machine


【解决方案1】:

在一个new机器上,意味着一个新的VM,docker确实会从docker hub拉取镜像到本地VM的docker镜像存储路径:

/var/lib/docker/images

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

如果您想在机器之间共享图像,您需要一个充当您的私有注册表,并拥有自己的证书以启用 https 访问。
查看example here,使用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

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

For instance:

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

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

【讨论】:

  • 感谢@VonC,这绝对有帮助。但我正在寻找更简单的解决方法。我不能跳过注册表设置并使机器能够在将图像拉入机器之前检查主机上的默认图像位置,同时在其中创建容器吗?
  • @nmrony 请参阅stackoverflow.com/q/33054369/6309:我会设置一个注册表镜像:docs.docker.com/registry/mirror
  • @ScottStensland 谢谢。我已将链接包含在答案中以获得更多可见性。
猜你喜欢
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 2018-09-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2018-08-01
相关资源
最近更新 更多