自由気ままに書いちゃおう

好きなことをつらつらと・・・

【Docker】Dockerホストのディレクトリをコンテナでマウントする際の権限について

前回の記事からの続きです。

www.guri2o1667.work


今回は、Dockerホストのディレクトリの権限を変更し、
コンテナ側からアクセスすることができるのかを確かめてみます。

■前提

Dockerコンテナ(apache2サーバ)を起動する際のdocker runコマンドは
以下の通りです。

docker run -itd --name apache2 -v /var/tmp/apache2:/usr/local/apache2/htdocs -p 8082:80 httpd:2.4

■検証の流れ

1.Dockerホストの/var/tmp/apache2ディレクトリをパーミッションXXX(※)で作成します。
2.apache2コンテナで上記1をマウントして起動します。
3.ブラウザからアクセスできるかを確認します。

※ 上記1のパーミッションは700、750、755の3パターンでやってみます。

■検証1:apache2ディレクトリのパーミッションが700の場合

結果: ディレクトリにアクセス出来ず、index.htmlが読み取れなかった。
f:id:guri2o1667:20210520165027p:plain

f:id:guri2o1667:20210520165233p:plain

f:id:guri2o1667:20210520165249p:plain

■検証2:apache2ディレクトリのパーミッションが750の場合

結果: ディレクトリにアクセス出来ず、index.htmlが読み取れなかった。

f:id:guri2o1667:20210520165435p:plain

f:id:guri2o1667:20210520165249p:plain

■検証3:apache2ディレクトリのパーミッションが755の場合

結果: ディレクトリにアクセス出来た!!

f:id:guri2o1667:20210520165528p:plain

f:id:guri2o1667:20210520165542p:plain

■結論

Dockerホストにて、マウント対象ディレクトリ(この記事の場合、/var/tmp/apache2)にパーミッションOtherに読み取り権限が付与されている必要があります。

■コンテナ側から見るとどうなっているのか

コンテナ側からディレクトリ権限を見た場合を記載しております。

■検証1:Dockerホストのapache2ディレクトリのパーミッションが700の場合

結果: コンテナ側のディレクトリも700になります。なのでブラウザからアクセスできません。

f:id:guri2o1667:20210520175304p:plain

f:id:guri2o1667:20210520175322p:plain

検証2,3については想像がつくと思うので割愛します。
※Dockerホスト側に連動して、パーミッションが変動します。

■コンテナ側から権限変更するとどう見えるのか

コンテナ側からディレクトリ権限を変更してみます。

f:id:guri2o1667:20210520180716p:plain

念のため、Dockerホスト側も見てみます。
Dockerホストでも755に変更されていることが確認できます。

f:id:guri2o1667:20210520180742p:plain


ブラウザからアクセスも可能です。

f:id:guri2o1667:20210520181026p:plain



結論:Dockerホストからでもコンテナ側からでも権限の変更可能


以上です。