docker cp不适合这个mysql容器

时间:2014-09-26 18:35:05

标签: mysql docker

尝试复制目录但似乎无效。

启动MySQL容器。

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

NOTHING。

这是the script自己尝试一下。


额外信息。

在Ubuntu 14.04上

jc@dev:~/work/jenkins/copy-sql/mysql$ docker -v
Docker version 1.2.0, build fa7b24f

2 个答案:

答案 0 :(得分:1)

在容器所在图片的Dockerfile中,有VOLUME指令告诉Docker将/var/lib/mysql目录从容器文件系统中删除

docker cp只能访问容器文件系统,因此无法查看已装入卷中的文件。

如果您需要备份您的mysql数据,建议您按照Docker用户指南中Backup, restore, or migrate data volumes部分的说明进行操作。您可能还会发现discordianfish/docker-backup泊坞窗图像对该任务很有用。


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

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

$ cat Dockerfile FROM base VOLUME /data

  • 构建名为test

    的图片
    $ docker build --force-rm -t test .
    
  • 运行一个名为container_1的容器,它将创建两个文件,一个在已装载的卷上

    $ 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

答案 1 :(得分:0)

您似乎正在尝试将容器的name传递给docker cp命令。 docs表示它需要一个容器ID。请尝试在脚本中使用“CONTAINER ID”。

修改

由于将脚本更改为grep以获取Container ID没有帮助,因此您应该首先手动尝试(在脚本之外)。

docker cp命令有效。它不适合你的原因是:

  1. 许可事项
  2. 您没有正确格式化命令,或
  3. 您的容器中不存在该目录。
  4. 如果正在运行的容器ID为XXXX,请尝试此操作(使用容器ID):

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

    如果这不起作用,并且您没有收到错误,我可能会建议您的容器中不存在该目录。

    <强> 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是here