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ではありません。
ホスト上のuid
の場合(id -u
)は、Dockerコンテナ(多くの場合「docker」)内のユーザーのuid
と同じではないため、この問題が発生する可能性があります。あなたが試すことができます:
chmod a+rwx -R project-dir/
核オプションはgit
ワークスペースを不潔にし、それはあなたを非常に不快にさせるので、最良の長期的な解決策ではありません。それは出血を止めます。
問題をさらに理解するために、次のものが役立つ場合があります。
Dockerバージョン1.7以降、次のように:Zまたは:zフラグを使用して、コンテナーへのアクセス許可を持つホストディレクトリをマウントするオプションがあります。
docker run -v ./api:/usr/src/app: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.