web-dev-qa-db-ja.com

Dockerコンテナ内に--​​bindをマウントするにはどうすればよいですか?

debian:jessieに基づいたこのコンテナがあります(ただし、Alpine:3.3で同じ問題が発生したため、これはあまり関係ありません)。私は私がする必要があるポイントに到達します

mount --bind /htdocs/www /home/user/example.com/www

そして私は得る

mount: permission denied

カーネルログに何も見つかりません。-vvvは何も興味深いものを生成しません。私は明らかにホスト上でこれを行うことができます(サブツリー/ノードの他のペアを使用)。上記の私の例では、/ htdocs/wwwはDockerボリュームのマウントポイントですが、コンテナー内のサブツリー/ノードのペアをmount --bindできないため、重要ではないようです。

11
Morpheu5

mountシステムコールを使用するには、CAP_SYS_ADMIN機能が必要です。デフォルトでは、Dockerはコンテナを生成するときにすべての機能をドロップします(つまり、rootであっても、すべてを実行することは許可されていません)。詳細については、 mount(2)のマニュアルページ を参照してください。

コンテナを--cap-add=SYS_ADMINフラグで開始して、この機能をコンテナに追加できます。

root@Host > docker run --rm -it --cap-add=SYS_ADMIN debian:jessie
root@ee0b1d5fe546:/# mkdir /mnt/test
root@ee0b1d5fe546:/# mount --bind /home /mnt/test/
root@ee0b1d5fe546:/# 

これは注意して使用してください。信頼できないソフトウェアを特権コンテナで実行しないでください。

25
helmbert