如何控制我复制进出容器的文件所属的用户?
docker cp
命令 关于文件所有权的说明如下:
cp
命令的行为类似于 Unix 的cp -a
命令,即目录以尽可能保留权限进行递归复制。所有权设置为目标处的用户和主组。例如,复制到容器中的文件由 root 用户的UID:GID
创建。复制到本地机器上的文件使用调用docker cp
命令的用户的UID:GID
创建。然而,如果您指定了-a
选项,docker cp
将把所有权设置为源处的用户和主组。
它说复制到容器中的文件将被创建为 root 用户,但这不是我看到的情况。我创建了两个属于用户 id 1005 和 1006 的文件。这些所有者被翻译成容器的用户命名空间。当我将文件复制到容器中时,-a
选项似乎没有任何区别。
$ sudo chown 1005:1005 test.txt
$ ls -l test.txt
-rw-r--r-- 1 1005 1005 29 Oct 6 12:43 test.txt
$ docker volume create sandbox1
sandbox1
$ docker run --name run1 -vsandbox1:/data alpine echo OK
OK
$ docker cp test.txt run1:/data/test1005.txt
$ docker cp -a test.txt run1:/data/test1005a.txt
$ sudo chown 1006:1006 test.txt
$ docker cp test.txt run1:/data/test1006.txt
$ docker cp -a test.txt run1:/data/test1006a.txt
$ docker run --rm -vsandbox1:/data alpine ls -l /data
total 16
-rw-r--r-- 1 1005 1005 29 Oct 6 19:43 test1005.txt
-rw-r--r-- 1 1005 1005 29 Oct 6 19:43 test1005a.txt
-rw-r--r-- 1 1006 1006 29 Oct 6 19:43 test1006.txt
-rw-r--r-- 1 1006 1006 29 Oct 6 19:43 test1006a.txt
当我从容器中复制文件时,它们总是归我所有。同样,-a
选项似乎没有起作用。
$ docker run --rm -vsandbox1:/data alpine cp /data/test1006.txt /data/test1007.txt
$ docker run --rm -vsandbox1:/data alpine chown 1007:1007 /data/test1007.txt
$ docker cp run1:/data/test1006.txt .
$ docker cp run1:/data/test1007.txt .
$ docker cp -a run1:/data/test1006.txt test1006a.txt
$ docker cp -a run1:/data/test1007.txt test1007a.txt
$ ls -l test*.txt
-rw-r--r-- 1 don don 29 Oct 6 12:43 test1006a.txt
-rw-r--r-- 1 don don 29 Oct 6 12:43 test1006.txt
-rw-r--r-- 1 don don 29 Oct 6 12:47 test1007a.txt
-rw-r--r-- 1 don don 29 Oct 6 12:47 test1007.txt
-rw-r--r-- 1 1006 1006 29 Oct 6 12:43 test.txt
$
docker exec -it --user root <container-id> chown -R <username>:<groupname> <folder/file>
(意思是将容器中<folder/file>
文件夹/文件的所有权更改为<username>:<groupname>
用户/用户组,以便更好地管理它们) - Obotor