私はUbuntu 14.04でLXC/LXDを実験してきましたが、すべてうまく機能しています。ホストマシンとコンテナの間で共有ディレクトリを動作させる方法を理解するだけで、Virtualboxを完全に捨てることができます。
私はこのページを見ました: https://wiki.gentoo.org/wiki/LXD
これは手順を提供しますが、エラーが発生し続けます。
誰もがこれを機能させるための簡単で明確な指示を知っていますか?助けていただければ幸いです。
これで、LXDプロファイルを使用して、コンテナとホストのUIDとGID間のマッピングを処理する、この問題に対する有効で安全なソリューションが得られました。
非常に役立つGistがここにあります:
https://Gist.github.com/bloodearnest/ebf044476e70c4baee59c5000a10f4c8
https://wiki.gentoo.org/wiki/LXD の説明は正しいですが、もう少し説明が必要な場合があります。
ホストで、最初にコンテナデータが保存されているディレクトリの所有権を確認します。走る
Sudo ls -l /var/lib/lxd/containers
ディレクトリを共有するコンテナの所有者を確認します。私の場合、uid
とgid
は両方とも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になっていることがわかります。これはまったく理にかなっています。
この質問に対する更新された回答を次に示します。
ホストフォルダー/var/www
を/var/test
としてコンテナーにマウントします。
lxc config device add mycontainer vartest disk source=/var/www path=/var/test
追加のデバイスをコンテナーに割り当てることができ、これらはホストがアクセス可能なフォルダーにすることができます。
$ 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
ph0t0nixの優れた答え に基づいて、Ubuntu 18.04サーバーに対して次の段階的なアプローチを提案します。
ホストでrootfsの所有者のUIDを決定します。
Sudo ls -l /var/lib/lxd/storage-pools/lxd/containers/webserver/rootfs
id -u root → 100000
コンテナでubuntuのUIDを決定します(コンテナ内のユーザー):
id -u ubuntu → 1000
ホストで共有フォルダーを作成し、コンテナーに追加します。
lxc config device add webserver mydevicename disk path=/home/share_on_guest source=/home/share_on_Host
共有フォルダーのホストUIDで調整します(UID = UIDホスト+ゲストUID):
Sudo chown 101000:101000 /home/share_on_Host
ゲスト(ユーザーubuntu)は共有フォルダーにアクセスできるようになり、chmod
を使用して、コンテナー内で共有フォルダーへのアクセスを調整できます。