アップデートで指摘したように、ファイルの UID はバインド マウントにマップされません。これが、Linux がバインド マウントを行う方法です。別の UID でコンテナーを開始できますが、これにより、コンテナー内の /etc/passwd が別のユーザーにマッピングされるか、(あなたの場合は) ユーザーにマッピングされません。さまざまなオプションがありますが、私の好みは、私の fix-perms スクリプトを使用して、イメージのエントリポイント内で実行される usermod コマンドでコンテナーの UID を変更することです。これはルートとして実行する必要がありますが、その後 gosu
を使用できます コマンドを実行するときにユーザーにドロップダウンします。これについては、dockercon プレゼンテーションで話しました。
ホスト NFS ディレクトリへのバインド マウントの代わりに、NFS サーバーに直接ボリューム マウントを行うこともできます。これを行う方法の例をいくつか示します:
# create a reusable volume
$ docker volume create --driver local \
--opt type=nfs \
--opt o=nfsvers=4,addr=nfs.example.com,rw \
--opt device=:/path/to/dir \
foo
# or from the docker run command
$ docker run -it --rm \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=nfs.example.com\",volume-opt=device=:/host/path \
foo
# or to create a service
$ docker service create \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=nfs.example.com\",volume-opt=device=:/host/path \
foo
# inside a docker-compose file
...
volumes:
nfs-data:
driver: local
driver_opts:
type: nfs
o: nfsvers=4,addr=nfs.example.com,rw
device: ":/path/to/dir"
...