From 7668114cba6ade5e0dbdac6460cd864dd9ffbf87 Mon Sep 17 00:00:00 2001 From: yangshukui Date: Thu, 6 Jul 2017 17:03:38 +0800 Subject: [PATCH] Fix docker cp dir with hard link docker run --name=test ubuntu /bin/sh -c "cd /tmp && echo hi > a && ln a b" && docker cp test:/tmp tmp_ test link /root/tmp/a /root/tmp_/b: no such file or directory Signed-off-by: yangshukui Upstream-commit: d58ffa0364c04d03a8f25704d7f0489ee6cd9634 Component: engine --- components/engine/pkg/archive/copy.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/components/engine/pkg/archive/copy.go b/components/engine/pkg/archive/copy.go index 0614c67cec..5281e29d18 100644 --- a/components/engine/pkg/archive/copy.go +++ b/components/engine/pkg/archive/copy.go @@ -332,6 +332,9 @@ func RebaseArchiveEntries(srcContent io.Reader, oldBase, newBase string) io.Read } hdr.Name = strings.Replace(hdr.Name, oldBase, newBase, 1) + if hdr.Typeflag == tar.TypeLink { + hdr.Linkname = strings.Replace(hdr.Linkname, oldBase, newBase, 1) + } if err = rebasedTar.WriteHeader(hdr); err != nil { w.CloseWithError(err)