docker的cp不适用于这个MySQL容器

试图复制一个目录,它似乎并没有工作。

启动一个msyql容器。

docker cp mysql:/var/lib/mysql . cd mysql ls 

没有。

这里是自己尝试的脚本。

http://goo.gl/nIMZJd


额外的信息。

在Ubuntu 14.04上

jc @ dev:〜/ work / jenkins / copy-sql / mysql $ docker -v Docker版本1.2.0,build fa7b24f

在容器来源的映像的Dockerfile中,有VOLUME指令告诉Docker将/var/lib/mysql目录从容器文件系统中移出

docker cp只能访问容器文件系统,因此不会看到安装卷中的文件。

如果你需要备份你的mysql数据,我build议你按照Docker用户指南中的说明备份,还原或迁移数据卷 。 你也可能会发现discordianfish / docker-backup docker镜像对于这个任务很有用。


这里有一个小例子来说明你的情况。

  • 给一个简单的Dockerfile只有VOLUME指令

$ cat Dockerfile FROM base VOLUME /data

  • build立一个名为test的图像

     $ docker build --force-rm -t test . 
  • 运行一个名为container_1 ,该container_1将创build两个文件,一个位于已安装的卷上

     $ docker run -d --name container_1 test bash -c 'echo foo > /data/foo.txt; echo bar > /tmp/bar.txt; while true; do sleep 1; done' 
  • 确保容器正在运行

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9e97aa18ac83 test:latest "bash -c 'echo foo > 3 seconds ago Up 2 seconds container_1

  • 使用docker cp命令将cp文件/tmp/bar.txt并检查其内容

$ docker cp container_1:/tmp/bar.txt . $ cat bar.txt bar

  • 尝试与安装卷中的文件相同(不起作用)

$ docker cp container_1:/data/foo.txt . 2014/09/27 00:03:43 Error response from daemon: Could not find the file /data/foo.txt in container container_1

  • 现在运行第二个容器来打印出该文件的内容

$ docker run --rm --volumes-from container_1 base cat /data/foo.txt foo

它看起来像你试图将你的容器的name传递给docker cp命令。 文档说它需要一个容器ID。 而不是尝试在脚本中查找“容器标识”。

编辑

由于将脚本更改为容器ID的grep没有帮助,因此应该先手动(在脚本之外)尝试此操作。

docker cp命令起作用。 它不适合你的原因是:

  1. 一个许可的事情
  2. 你没有正确地格式化命令,或者
  3. 该目录不存在于您的容器中。

使用正在运行的容器标识号XXXX,试试这个(使用你的容器ID):

 sudo docker cp XXXX:/var/lib/mysql . 

如果这不起作用,你没有得到一个错误,我可能会build议该目录不存在于你的容器。

EDIT2:

正如我所说,这是以上三件事之一。 我运行你的脚本时得到这个:

 2014/09/26 16:10:18 lchown mysql: operation not permitted 

将脚本的最后一行改为sudo前缀现在不会出现错误,但是也不会有目录。

交互式运行容器:

 docker run -t -i mysql /bin/bash 

一旦进入容器:

 cd /var/lib/mysql ls 

…没有文件。

所以你的脚本工作正常。 该目录只是空的(基本上#3)

作为参考,mysql的Dockerfile在这里 。