web-dev-qa-db-ja.com

Ubuntuでのdockerの実行:マウントされたホストボリュームはコンテナーから書き込みできません

DockerはMacでうまく機能しますが、Macのカーネルはdockerをサポートしていないため、VirtualBox(またはParallels、またはVMWare Fusion)内でdocker Hostを実行する必要があります。

そこで、私は自分のアプリケーションとdocker-composeをUbuntuデスクトップでネイティブにセットアップしようとしました。ここでは、DockerクライアントとDockerホストの両方が同じシステムで物理的に実行されます。これは機能しましたが、実行中のDockerコンテナーはマウントされたホストボリュームに書き込むことができません。

私は次の設定でdocker-composeを使用します:

volumes:
   - ./api:/usr/src/app

ホストUbuntu OSの「api」ディレクトリを/ usr/src/appの下のdockerコンテナーにマウントしています。

docker inspect <container ID>は、ボリュームが書き込み可能であることを示します

"Destination": "/usr/src/app",
"Mode": "rw",
"RW": true

しかし、そうではありません:permission denied dockerコンテナー内からディレクトリを作成したり、ファイルを編集したりしようとすると、.

もちろんこの問題をググって、CentOS/RHELのいくつかのSELinux問題に遭遇しましたが、Ubuntu 15.10、64ビット版を実行しています、CentOSではありません。

16
Alex Kovshovik

ホスト上のuidの場合(id -u)は、Dockerコンテナ(多くの場合「docker」)内のユーザーのuidと同じではないため、この問題が発生する可能性があります。あなたが試すことができます:

  1. ユーザーとDockerコンテナー内のユーザーの間でUIDを同じにする。
  2. ディレクトリのグループ権限を、自分とdockerの両方が属するグループに対して書き込み可能に設定します。
  3. 核オプションを使用することもできます。

chmod a+rwx -R project-dir/

核オプションはgitワークスペースを不潔にし、それはあなたを非常に不快にさせるので、最良の長期的な解決策ではありません。それは出血を止めます。

問題をさらに理解するために、次のものが役立つ場合があります。

  1. https://github.com/docker/docker/issues/7906
  2. https://github.com/docker/docker/issues/7198
22
Freedom_Ben

Dockerバージョン1.7以降、次のように:Zまたは:zフラグを使用して、コンテナーへのアクセス許可を持つホストディレクトリをマウントするオプションがあります。

docker run -v ./api:/usr/src/app:Z
  • :z-ラベル「svirt_sandbox_file_t」を使用してすべてのコンテナに権限を追加します
  • :Z-現在のコンテナラベルにのみ権限を追加します

Docker-compose v1.4.0以降、次のようにdocker composeで使用できます。

volumes:
   - ./api:/usr/src/app:Z

追加する必要がありますが、これにはまだいくつかの問題があります( docker-composeを使用してホストディレクトリにアクセス許可を追加する を参照)。

参照:

Dockerでボリュームを使用すると、SELinuxで問題が発生する可能性がある http://www.projectatomic.io/blog/2015/06/using-volumes-with-docker-can-cause-problems-with-selinux/ =

Dockerユーザーガイド- https://docs.docker.com/engine/userguide/dockervolumes/#volume-labels

V1.4.0のDocker-composeリリースノート- https://github.com/docker/compose/releases/tag/1.4.

21
Avi Farada