どのユーザーがコンテナにコピーしたりコピーしたりするファイルを所有しているかを制御するにはどうすればよいですか?dockerの後のファイルの所有権cp
docker cp
commandは、ファイルの所有権についてはこれを言う:
そのディレクトリ内のUNIX
cp -a
コマンドが可能な場合は、保存権限で再帰的にコピーされるようcp
コマンドが動作します。所有権は、宛先のユーザーおよびプライマリグループに設定されます。たとえば、コンテナにコピーされたファイルは、ルートユーザーのUID:GID
で作成されます。ローカルマシンにコピーされたファイルは、docker cp
コマンドを呼び出したユーザーのUID:GID
で作成されます。ただし、-a
オプションを指定すると、docker cp
は、所有者をソースのユーザーおよびプライマリグループに設定します。
コンテナにコピーされたファイルはルートユーザーとして作成されますが、それは私が見るものではありません。ユーザーID 1005と1006が所有する2つのファイルを作成します。これらの所有者はコンテナのユーザー名前空間に変換されます。 -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
$