Docker host - container 간 복사

호스트 - 컨테이너 간 파일 및 디렉토리 복사

$ 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를 설정해 복사할 수 있도록 했으면 좀 더 편할텐데…