docker for windows
使用
docker create -v /root -v /workspace --name work my/work /bin/true
创建了一个 volume 容器 其他容器运行时连接这个 volume 容器
docker run -d --restart=always --volumes-from work nginx
docker run -d --restart=always --volumes-from work php7
这样即使主机重启,重启后的 nginx 和 php 数据依然存在
今天运行了
docker rm `docker ps -qa`
结果把 volume 容器给删除了
用同样的 docker create 命令创建的 volume 容器,容器里的内容是空的...
现在还有办法将之前的 volume 容器重新创建回来吗?(之前连接到这个 volume 容器的 nginx 和 php 容器还在运行)
已解决
如果 docker rm
的时候没加 -v
参数的话,容器的数据不会马上被删除
我还有容器挂载在这个 volume 容器上,通过 docker inspect CONTAINER ID
可以查看容器当前的挂载目录
"Mounts": [
{
"Type": "volume",
"Name": "979811b39e1eac1314fa2f909a8d801396c3748f69a8c009cf53169b2b70c46b",
"Source": "/var/lib/docker/volumes/979811b39e1eac1314fa2f909a8d801396c3748f69a8c009cf53169b2b70c46b/_data",
"Destination": "/workspace",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
然后通过
docker create -v /root -v /workspace --name work my/work /bin/true
创建同名的 volume 容器,之后 运行 docker inspect work
查看当天的挂载目录
如果是 Linux 上的话,直接进入到 /var/lib/docker/volumes/
将旧数据拷贝到新的挂载目录下
如果是 Mac 或者 Windows 的话,通过以下命令进入到 docker 虚拟机里
docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -i sh
之后的操作就和 Linux 上一样
最后,将使用 --volumes-from work
挂载的容器停掉(docker stop
)并重新运行(docker run
)
参考:
https://forums.docker.com/t/can-i-kvm-with-the-hyper-v-mobylinuxvm/17716/2
http://blog.idetailaid.co.uk/how-to-recover-an-orphaned-docker-volume-for-a-data-container