尝试复制目录但似乎无效。
启动MySQL容器。
docker cp mysql:/var/lib/mysql .
cd mysql
ls
NOTHING。
这是the script自己尝试一下。
额外信息。
jc@dev:~/work/jenkins/copy-sql/mysql$ docker -v
Docker version 1.2.0, build fa7b24f
答案 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命令有效。它不适合你的原因是:
如果正在运行的容器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。