Docker卷初始化 - 将数据从映像复制到容器

时间:2015-11-29 20:06:27

标签: docker

https://docs.docker.com/engine/userguide/dockervolumes/说:

  

“创建容器时初始化卷。如果容器的基本映像包含指定安装点的数据,则在卷初始化时将现有数据复制到新卷中。”

然而,这并不是我所观察到的。这是我的情景:

  1. 我创建了一个包含/ opt / data
  2. 中的一些数据的容器
  3. 我提交此容器并从中创建一个图像
  4. 我使用刚制作的图像创建另一个容器,并创建一个将/ opt / data指向本地目录的卷。
  5. 根据文档,我预计图像的/ opt / data下的文件将被复制到本地创建的卷。它没有发生..

    <local>:~$ docker run --name test -it ubuntu bash
    root@76f42fce6ab7:/# mkdir /opt/data
    root@76f42fce6ab7:/# echo "foo" > /opt/data/my-data
    $ docker commit test test-with-data
    
    <local>:~$ docker run -it -v /tmp/test-volume:/opt/data test-with-data bash
    root@731b483527ad:/# ls /opt/data
    root@731b483527ad:/#
    root@731b483527ad:/# exit
    

    我有什么不明白的地方吗?

1 个答案:

答案 0 :(得分:1)

这是因为您已经指定了主机目录。如果您没有指定主机目录,而是让Docker管理卷,它会按预期工作:

$  docker run --name test -it debian bash
root@ac99b805a689:/# mkdir /opt/data
root@ac99b805a689:/# echo "foo" > /opt/data/my-data
root@ac99b805a689:/# exit
exit
$ docker commit test test-with-data
a35463157fbee6180ed91c458288cf528da93a23bf340f44c3d2a7ff355fa2b1
$ docker run -it -v /opt/data/ test-with-data bash
root@73f70c3b5518:/# ls /opt/data
my-data
root@73f70c3b5518:/# cat /opt/data/my-data
foo