以下は、ホストディレクトリの1つをコンテナにマウントするために行ったことです。達成したいので、これは思ったよりもトリッキーです
- コンテナ内で、ディレクトリに書き込むことができるはずです。
- コンテナの外側で、コンテナ内に作成されたファイルとディレクトリに書き込むことができるはずです。
さまざまな記事をオンラインで読んだ後(最も役立つのはこのgithubの問題です)、これをどのように解決するかを以下に示します。トリックは、ホストユーザーのuidとgidをコンテナー内のユーザーのuidとgidにマップすることです。
/home/breakds/projects
コンテナ内のまったく同じ場所にマウントするとします。外部ディレクトリはbreakds
、uidとgidがのユーザーが所有しています1000
。
次に、という名前のコンテナにユーザーを作成しました。そのユーザーのdebian
uidとgidも偶然です1000
(最初の非rootユーザーであるため)。次に、ホスト上で(lxc)プロファイルを作成します。
lxc profile edit breakds
以下はプロファイルの内容です(yaml形式であると思います)。
name: breakds
config:
raw.lxc: |
lxc.id_map =
lxc.id_map = u 0 165536 999
lxc.id_map = g 0 165536 999
lxc.id_map = u 1000 1000 1
lxc.id_map = g 1000 1000 1
lxc.id_map = u 1001 166537 64535
lxc.id_map = g 1001 166537 64535
user.vendor-data: |
packages:
- bash
description: allow home dir mounting for breakds
devices:
eth0:
name: eth0
nictype: bridged
parent: lxdbr0
type: nic
projects:
path: /home/breakds/projects
source: /home/debian/projects
type: disk
次に、このプロファイルをそのコンテナに永続的に適用します。
$ lxc profile apply <my container> breakds
これでうまくいくはずです。
注:このプロファイルに切り替える前に、所有者/グループがdebianであるすべてのディレクトリまたはファイルを削除する必要があることに注意してください(おそらく切り替え後に再作成されます)。これは、uidおよびgidマッピングの後、それらの所有権が無効になるためです。私はもともと私は1000から1000にすべてをマッピングしているのでうまくいくと思っていましたが、ここで何かを見逃したと思います。ハックなしでこれを解決する方法について誰かがアドバイスできれば素晴らしいと思います。