ec2インスタンスのdocker上でredmineを運用し始めたのだけど,
docker start redmine
で起動させようとしたら以下のエラーが出てしばらくはまった.
Error response from daemon: devmapper: Error mounting '/dev/mapper/docker-202:1-12597455-b72245ffd57cc14382b64c23cad9581654a63a08dd4ccc5f8d088623b0c5f201' on '/var/lib/docker/devicemapper/mnt/b72245ffd57cc14382b64c23cad9581654a63a08dd4ccc5f8d088623b0c5f201': invalid argument
Error: failed to start containers: redmine
適当にググって見ると,他の人も同様の現象が起こっていた. Error response from daemon: devmapper: Error mounting ‘/dev/mapper/docker-253:2-8652374-‘ on ‘/var/lib/docker/devicemapper/mnt/’: invalid argument
SELinuxをdisableにした後,rebootすると上のエラーが出ると書いてある. 確かに前回の起動時にSELinuxをdisableにしていたので,自分も当てはまっている.
SELinuxの設定をenforcingにする
仕方がないのでSELinuxをもう一度enforcingに戻すことにする.
$ sudo vim /etc/selinux/config
SELINUX=disabled
と書いてある部分のdisabledをenforcingに変更する.
エディタ起動するのが面倒な人は以下のコマンドで.
$ sudo sed -i 's/SELINUX=disabled/SELINUX=enforcing/g' /etc/selinux/config
SELinux変更後はOSの再起動が必要なので,sudo reboot
で再起動をする.
再起動後,getenforce
コマンドで結果がEnforcingになっていれば変更完了.
SELinuxが有効の状態で,Docker内のコンテナからmountファイルにアクセスができるようにする
しかし,この状態だとSELinuxのセキュリティのためにホスト側のディレクトリをdockerコンテナ側にmountしたVolumeにコンテナ側からアクセスができない.
$ sudo docker exec -it redmine bash
# redmineコンテナ内に入る
$ ls data-share-dir # Permission denied
Host volume mount fails when using SElinux and a mountpoint as source #23989 によると,以下のコマンドでアクセスできるようだ.
$ chcon -Rt svirt_sandbox_file_t /path/to/docker-redmine/share/
でSELinuxあった状態でもアクセスできた.
$ sudo docker exec -it redmine bash
# redmineコンテナ内に入る
$ ls data-share-dir # 今度は成功!
chcon
はSELinuxのセキュリティコンテクストを変更するコマンドらしい.
-R
で指定したディレクトリを再帰的に変更,-t
でセキュリティコンテキストのタイプを変更する.
セキュリティコンテキストが変更されたかどうかは以下のコマンドで確認する.
$ ls -Z
drwxrwxr-x. fhiyo fhiyo unconfined_u:object_r:svirt_sandbox_file_t:s0 share
左からmode, user, group, security context, file nameの順番.