我想在DigitalOcean Droplet上部署一个本地构建的容器。我一直在遵循these的说明。问题是通过运行:
eval $(docker-machine env DROPLET_NAME)
Docker将环境变量设置为远程计算机,从而有效地将环境更改为在远程计算机上运行Docker。这是预期的。但是,假设我有一个本地映像,名为rb612/docker-img:latest
,但尚未推送到远程映像。我想在远程计算机环境中运行它。
如果我跑步:
docker run -d -p 80:8000 rb612/docker-img:latest
然后我得到Unable to find image 'rb612/docker-img:latest' locally
。如果我的理解是正确的,那是因为它不再在我的计算机上下文中运行。在不设置远程环境变量的情况下,打开新的外壳程序并运行相同的命令即可正常工作。
所以我想知道是否有一种方法可以在远程计算机上运行此本地映像。我尝试使用-w
标志传递本地路径,但是遇到了同样的错误。而是使用远程docker映像进行部署可以正常工作。
答案 0 :(得分:1)
所以我想知道是否存在一种方法可以在远程计算机上运行此本地映像。
好的。
您有两种选择。
您可以使用docker image save
将图像保存到文件中。在运行eval
语句之前执行此操作,或者在未配置远程Docker环境的其他终端窗口中执行此操作:
docker image save rb612/docker-img:latest > docker-img.tar
运行eval $(...)
命令后,使用docker image load
将映像发送到远程Docker:
docker image load < docker-img.tar
现在该映像在您的远程Docker主机上可用,您可以正常docker run
使用它。
您可以设置自己的远程注册表,在这种情况下,您可以简单地从本地计算机docker push
到该注册表,而从远程计算机docker pull
。通常,这是最佳的长期解决方案,但是初始设置(尤其是使用SSL正确保护事物)要涉及更多一点。详细信息在documentation中。