web-dev-qa-db-ja.com

LXCコンテナとホスト間でディレクトリを共有するにはどうすればよいですか?

ホストシステム(ubuntu 14.04)とubuntu lxcコンテナー間でフォルダーを共有するにはどうすればよいですか?

ホストにフォルダーをマウントしてみました:

Sudo mount --bind /media/data/share /media/data/container/name/rootfs/share

しかし、ファイルが表示されません。

同じことは次の場合にも当てはまります。

Sudo ln -s /media/data/share /media/data/container/name/rootfs/share

共有フォルダーのアクセス許可を変更する必要がありますか?

12
Max

OpenSUSE wikiで記事を見つけました: https://en.opensuse.org/User:Tsu2/LXC_mount_shared_directory

手順に従いましたが、現在は機能しています。

ホストディレクトリを作成します。

mkdir /media/data/share && chmod 7777 /media/data/share

Lxcコンテナーにディレクトリを作成します。

mkdir /share

ホスト上のlxc設定ファイルを編集します。

nano /var/lib/lxc/containername/config
lxc.mount.entry = /media/data/share share none ro,bind 0.0
12
Max

LXCドキュメンテーション によると、これは特権コンテナを介して行うことができます:

lxc launch ubuntu priv -c security.privileged=true
lxc config device add priv homedir disk source=/home/$USER path=/home/ubuntu
11
Jorge Castro

以下は、ホストディレクトリの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

これでうまくいくはずです。

NOTE:このプロファイルに切り替える前に、所有者/グループがdebianであるすべてのディレクトリまたはファイルが削除されることを確認してください(そしておそらく切り替え後に再作成されます)。これは、uidおよびgidマッピングの後、それらの所有権が無効になるためです。元々私は1000から1000にすべてをマッピングしているので問題ないと思っていましたが、ここで何かを見逃したと思います。ハックなしでこれを解決する方法について誰かがアドバイスできれば素晴らしいと思います。

4
BreakDS

LXC設定ファイルを直接編集することにより、LXDなしでこれを行うこともできます。

# Container specific configuration
lxc.idmap = u 0 165536 1000
lxc.idmap = g 0 165536 1000
lxc.idmap = u 1000 1000 1
lxc.idmap = g 1000 1000 1
lxc.idmap = u 1001 166536 64535
lxc.idmap = g 1001 166536 64535

また、/ etc/subuidおよび/ etc/subgidを編集して、コンテナのユーザーのアカウントに、ホスト上のuid/gid 1000にマップする権限を付与する必要があります。

containeruser:165536:65536
containeruser:1000:1
1
apokluda