web-dev-qa-db-ja.com

LXC / LXDコンテナーへの共有ホストディレクトリの追加

私はUbuntu 14.04でLXC/LXDを実験してきましたが、すべてうまく機能しています。ホストマシンとコンテナの間で共有ディレクトリを動作させる方法を理解するだけで、Virtualboxを完全に捨てることができます。

私はこのページを見ました: https://wiki.gentoo.org/wiki/LXD

これは手順を提供しますが、エラーが発生し続けます。

誰もがこれを機能させるための簡単で明確な指示を知っていますか?助けていただければ幸いです。

18
user47227

これで、LXDプロファイルを使用して、コンテナとホストのUIDとGID間のマッピングを処理する、この問題に対する有効で安全なソリューションが得られました。

非常に役立つGistがここにあります:

https://Gist.github.com/bloodearnest/ebf044476e70c4baee59c5000a10f4c8

0
user47227

https://wiki.gentoo.org/wiki/LXD の説明は正しいですが、もう少し説明が必要な場合があります。

ホストで、最初にコンテナデータが保存されているディレクトリの所有権を確認します。走る

Sudo ls -l /var/lib/lxd/containers

ディレクトリを共有するコンテナの所有者を確認します。私の場合、uidgidは両方とも100000でした。

次に、これらを使用して、共有するディレクトリの所有権を変更します。

Sudo chown 100000:100000 /tmp/share_on_Host

コメントで指定した方法で、ディレクトリをコンテナと共有します。

lxc config device add mycontainer sharedtmp disk \
                  path=/tmp/share_on_guest source=/tmp/share_on_Host

これで、コンテナ内で、ディレクトリ/tmp/share_on_guest(システムが他のものに使用し、特別な権限を持っているため、ディレクトリを/tmpとしてマウントすることはお勧めできません)が表示されます。ルートによって。ここから、コンテナ内のchownを使用して、コンテナ内のユーザーに適切なuidおよびgidに所有権を変更できます。

サイドノートとして、コンテナの所有権を変更した後、例えばuid 33のユーザーは、ホスト上でuidが100033になっていることがわかります。これはまったく理にかなっています。

19
ph0t0nix

この質問に対する更新された回答を次に示します。

ホストフォルダー/var/www/var/testとしてコンテナーにマウントします。

lxc config device add mycontainer vartest disk source=/var/www path=/var/test
3

追加のデバイスをコンテナーに割り当てることができ、これらはホストがアクセス可能なフォルダーにすることができます。

$ lxc config ## display help
...
lxc config device add [<remote>:]<container> <device> <type> [key=value...]
    Add a device to a container.
...

<device>はユーザーが割り当てる任意の名前であり、以降のデバイス管理のIDとして使用されることに注意してください。

たとえば、ホストフォルダー「./Host」をコンテナー内の「/ mnt/Host」としてマウントするには...

lxc config device add mycontainer vartest disk source=$(pwd)/Host path=/mnt/Host

1つの問題が残っています-ホストとコンテナーの両方でこのフォルダーを書き込み可能にする場合は、それに応じて所有権とアクセス許可を構成する必要があります。これは、ユーザーおよびグループのid値の数値範囲を仮想化するLXDのデフォルトモードでは複雑です。 ただし、簡単な解決策があります:ホストと同等の権限で実行するようにコンテナを設定することにより、この仮想化をバイパスします...

lxc config set <container> security.privileged true

このアプローチのホストとセキュリティの完全な関係は、現時点では明確ではありませんが、仮想化にある程度「含まれている」ようです。実際のリスクは、コンテナを使用する方法と理由によって異なります。 https://insights.ubuntu.com/2017/06/15/custom-user-mappings-in-lxd-containersのテクニカルノートを参照してください。

さらに、この方法は、通常、コンテナでroot以外のユーザーとして操作する場合に最適です。

lxc exec zesty -- su --login ubuntu
3
nobar

ph0t0nixの優れた答え に基づいて、Ubuntu 18.04サーバーに対して次の段階的なアプローチを提案します。

  1. ホストでrootfsの所有者のUIDを決定します。

    Sudo ls -l /var/lib/lxd/storage-pools/lxd/containers/webserver/rootfs  
    id -u root   → 100000
  2. コンテナでubuntuのUIDを決定します(コンテナ内のユーザー):

    id -u ubuntu   → 1000
  3. ホストで共有フォルダーを作成し、コンテナーに追加します。

    lxc config device add webserver mydevicename disk path=/home/share_on_guest source=/home/share_on_Host
    
  4. 共有フォルダーのホストUIDで調整します(UID = UIDホスト+ゲストUID):

    Sudo chown 101000:101000 /home/share_on_Host
    
  5. ゲスト(ユーザーubuntu)は共有フォルダーにアクセスできるようになり、chmodを使用して、コンテナー内で共有フォルダーへのアクセスを調整できます。

1
joerg