如何控制哪个用户拥有我从容器中复制的文件?docker cp后的文件所有权
的docker cp
command说这有关文件的所有权:
在该目录中的
cp
命令的行为像Unixcp -a
命令与可能的话保存权限递归复制。所有权设置为目标用户和主要组。例如,复制到容器的文件是使用root用户的UID:GID
创建的。复制到本地机器的文件是使用调用docker cp
命令的用户的UID:GID
创建的。但是,如果您指定-a
选项,则docker cp
会将所有权设置为源用户和主组。
它说复制到容器的文件是作为root用户创建的,但这不是我所看到的。我创建了由用户标识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
$