docker cp具有相对符号链接的文件夹:无效的符号链接

时间:2016-03-04 03:57:18

标签: docker symlink

在我的容器中,我有一个文件夹,其中包含父亲父子文件夹的相对符号链接:

$ docker run --name symlink-test ubuntu bash -c "mkdir -p /1/2; touch /1/2/a; ln -s ../../usr /1/2; touch /1/2/z; ls -l /1/2"                                               :(
total 4
-rw-r--r--. 1 root root 0 Mar  4 03:37 a
lrwxrwxrwx. 1 root root 9 Mar  4 03:37 usr -> ../../usr
-rw-r--r--. 1 root root 0 Mar  4 03:37 z

我想将文件夹/1复制到主机。但是,我总是收到以下错误:

$ docker cp symlink-test:/1/2
invalid symlink "/tmp/2/usr" -> "../../usr"
$ ls 2
a

复制文件失败,docker cp在看到符号链接后中止。

有一些与此相关的Docker错误,但它们是固定的或由不同的东西引起:

我在Fedora 23上运行Docker 1.10.2。

docker cp的上述行为是故意还是错误?如果有意的话,背后的原因是什么?

3 个答案:

答案 0 :(得分:0)

我不知道这种行为是否是故意的,但这是一种解决方法:

docker cp my-container:/path/to/dir - | tar -x

答案 1 :(得分:0)

您可以docker exec -it <container> sh然后找到要复制的文件的符号链接readlink -f symlinkName,然后docker cp代替那个。

答案 2 :(得分:0)

就我而言,它可以通过以下方式工作:

docker cp -L container:/path/to/file.png current/directory/file.png