ホストシステム(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
共有フォルダーのアクセス許可を変更する必要がありますか?
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
LXCドキュメンテーション によると、これは特権コンテナを介して行うことができます:
lxc launch ubuntu priv -c security.privileged=true
lxc config device add priv homedir disk source=/home/$USER path=/home/ubuntu
以下は、ホストディレクトリの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にすべてをマッピングしているので問題ないと思っていましたが、ここで何かを見逃したと思います。ハックなしでこれを解決する方法について誰かがアドバイスできれば素晴らしいと思います。
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