什么是Docker COPY';s关于符号链接的规则/如何保留符号链接?
从本次试验来看,Docker的什么是Docker COPY';s关于符号链接的规则/如何保留符号链接?,docker,dockerfile,copy,symlink,Docker,Dockerfile,Copy,Symlink,从本次试验来看,Docker的COPY命令似乎没有保留符号链接,而是“跟随”符号链接并复制目标文件(?): 无论是从上下文还是从另一个Docker图像层复制,此行为都是相同的 是否有办法让Docker copy保留符号链接,即“跟踪”它们并创建硬文件?还是有一些惯例来解决这种情况 这个问题背后的背景是,我复制的基础层(很多)混合了指向它们的文件和符号链接。示例:libfoo.so->libfoo.so.1->libfoo.so.1.0.0 我花了一段时间在网上搜索这个话题,但出人意料地发现很少
COPY
命令似乎没有保留符号链接,而是“跟随”符号链接并复制目标文件(?):
无论是从上下文还是从另一个Docker图像层复制,此行为都是相同的
是否有办法让Docker copy保留符号链接,即“跟踪”它们并创建硬文件?还是有一些惯例来解决这种情况
这个问题背后的背景是,我复制的基础层(很多)混合了指向它们的文件和符号链接。示例:libfoo.so->libfoo.so.1->libfoo.so.1.0.0
我花了一段时间在网上搜索这个话题,但出人意料地发现很少有点击率。大多数“接近”的问题都是关于指向目录的符号链接,这与我的情况不同。我得到的最接近的答案是一个不幸的未回答的问题:如果您尝试将整个目录作为一个单元复制,而不是尝试复制目录中的文件,则此方法有效:
复制//foo/bar/
请注意,复制目录有一些微妙之处:注意,如果您COPY
a目录
注意:目录本身没有被复制,只是它的内容
对于您试图复制整个构建上下文的情况,这是很好的。如果您有要复制的子目录,则需要确保子目录名也位于
copy
的右侧,并且目录名以/
结尾。复制目录是否比复制单个文件/符号链接更有效?(这与/bin/cp
是一致的;它在@DavidMaze中没有很好的记录——这确实有效;非常感谢。起初,我认为我的实际情况比我的MCVE更难做到这一点,因为源目录和目标目录结构不同……但这并不重要:只要我指定完整的源路径(以/
结尾)和完整的目标路径,这就行得通。
$ ls -l
total 4
lrwxrwxrwx 1 user domain users 1 Mar 26 09:37 a -> b
-rw-r--r-- 1 user domain users 0 Mar 26 09:37 b
lrwxrwxrwx 1 user domain users 1 Mar 26 09:41 c -> d
-rw-r--r-- 1 user domain users 0 Mar 26 09:41 d
-rw-r--r-- 1 user domain users 54 Mar 26 09:39 Dockerfile
$
# Dockerfile
FROM alpine:3.7 as base
COPY [ "./*", "/foo/bar/" ]
$ docker build -t foo:tmp . && docker run -it foo:tmp
[+] Building 1.1s (7/7) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 116B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/alpine:3.7 0.8s
=> [internal] load build context 0.0s
=> => transferring context: 12.52kB 0.0s
=> CACHED [1/2] FROM docker.io/library/alpine:3.7@sha256:8421d9a84432575381bfabd248f1eb56f3aa21d9d7cd2511583c68c9b7511d10 0.0s
=> [2/2] COPY [ ./*, /foo/bar/ ] 0.1s
=> exporting to image 0.1s
=> => exporting layers 0.0s
=> => writing image sha256:81531080243eedcb443c7fe0c9e85df92515a6cf3f997c549414cae9bf6ca925 0.0s
=> => naming to docker.io/library/foo:tmp 0.0s
/ # ls -l /foo/bar/
total 4
-rw-r--r-- 1 root root 67 Mar 26 16:43 Dockerfile
-rw-r--r-- 1 root root 0 Mar 26 16:37 a
-rw-r--r-- 1 root root 0 Mar 26 16:37 b
-rw-r--r-- 1 root root 0 Mar 26 16:41 c
-rw-r--r-- 1 root root 0 Mar 26 16:41 d
/ #