$ docker cp --help
Usage: docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
Copy files/folders between a container and the local filesystem
Options:
-L, --follow-link Always follow symbol link in SRC_PATH
--help Print usage
현재 사용하고 있는 docker 버전은 17.05.0-ce인데 18.03 버전 기준의 docker docs에는 새로운 OPTION에 대한 내용도 있다.
--archive , -a Archive mode (copy all uid/gid information)
그런데 release note를 찾아봐도 -a 옵션이 언제 추가됐는지 나오지 않는다.
-L 옵션을 사용하면 symbolic link를 복사할 때 원본으로 치환된다. 예를 들어,
user@host:~/test$ ls -l
total 4
lrwxrwxrwx 1 user user 13 Jun 01 10:29 link_file.txt -> real_file.txt
-rw-rw-r-- 1 user user 113 Jun 01 10:28 real_file.txt
호스트에 위와 같은 파일들이 있을 때 symbolic link인 link_file.txt를 container에 -L 옵션이 없는 상태로 복사하면 다음과 같이 된다.
root@container:~/test$ ls -l
total 3
lrwxrwxrwx 1 root root 13 Jun 01 10:29 link_file.txt -> real_file.txt
하지만 -L 옵션을 붙여 복사하면 링크의 이름을 갖는 원본이 복사된다.
root@container:~/test$ ls -l
total 3
-rw-rw-r-- 1 root root 113 Jun 01 10:28 link_file.txt
호스트에서 컨테이너로 복사하면 UID:GID가 root가 된다. 반대로 컨테이너에서 호스트로 복사하면 docker cp
를 실행한 UID:GID로 설정된다. 즉, 필요한 경우 별도로 UID:GID를 변경해야 한다.
호스트와 컨테이너 간 사용자:그룹 정보를 맞춰둔 예는 거의 없을테니 추가하려면 -a 옵션 대신 UID:GID를 설정해 복사할 수 있도록 했으면 좀 더 편할텐데…