docker cp 一个带有相对符号链接的文件夹:无效的符号链接
Posted
技术标签:
【中文标题】docker cp 一个带有相对符号链接的文件夹:无效的符号链接【英文标题】:docker cp a folder with a relative symlink: invalid symlink 【发布时间】:2016-03-04 03:57:17 【问题描述】:在我的容器中,我有一个文件夹,其中包含指向父级父子文件夹的相对符号链接:
$ 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 错误,但它们要么是固定的,要么是由其他原因引起的:
FATA[0000] invalid symlink when copying a symlink with relative parent paths Error attempting to cp directory containing symlink我在 Fedora 23 上运行 Docker 1.10.2。
docker cp
的上述行为是有意的还是一个错误?如果是有意的,背后的原因是什么?
【问题讨论】:
当您执行 docker cp 时,容器中的当前 WORKDIR 是什么? 当前WORKDIR为Ubuntu镜像的默认WORKDIR,即/
。
【参考方案1】:
就我而言,我通过以下方式使其工作:
docker cp -L container:/path/to/file.png current/directory/file.png
【讨论】:
【参考方案2】:我不知道这种行为是否是故意的,但这里有一个解决方法:
docker cp my-container:/path/to/dir - | tar -x
【讨论】:
【参考方案3】:你可以docker exec -it <container> sh
然后找到你要复制的文件的符号链接readlink -f symlinkName
,然后docker cp
那个。
【讨论】:
感谢您的提示,但这并不能回答问题。【参考方案4】:“docker cp -L”将在相对符号链接上失败,您应该将它们修复为完整路径。
例如 无效的符号链接“/tmp/2/usr”->“../../usr” usr 是 ../../usr 的相对符号链接。 而是将其更改为: usr -> /full/path/to/usr/
另一个例子: 无效的符号链接“/working_folder/XXX/lib”->“../../lib”
因为:lib -> ../../lib/ 修复它:lib -> /full/path/to/lib/
它将通过以下方式工作: docker cp -L /full/path/to/working_folder:/working_folder/
【讨论】:
以上是关于docker cp 一个带有相对符号链接的文件夹:无效的符号链接的主要内容,如果未能解决你的问题,请参考以下文章