【Docker】docker-composeで起動したコンテナがPermission Deniedのログを吐き、起動しない
はじめに
GitLabとMySQLのDockerコンテナが、
ずーっとRestarting状態になってしまう現象を解決したので、
メモっておきます。
ログやdocker-compose.ymlを安易に貼り付けづらいので、ふわっと書いてます。
そのうち更新するかもしれないです。
環境
コンテナについては後ほど更新します。
ありものを使っているので、ちゃんと把握してませんでした。
いずれもdocker-composeで起動してました。
★ホストOSのSELinuxが有効
原因
- GitLab
ログを見てみると、Permission Denied云々。
SELinuxが、gitlab permission-updateの実行を阻害していたようです。
gitlab permission-updateを実施しないと、
/var/lib/gitlab/reconfigure/配下のファイルを開けませんって言われます。
ログを見てみると、Permission Denied云々。
SELinuxが、/var/lib/mysqlへのアクセスを阻害していたようです。
GitLabもMySQLも、どちらもアクセスが阻害されているのは、
volumes:
でマウントしているファイルでした。
解決方法
- GitLab・MySQL共通
docker-compose.ymlにprivileged: true
を追記で対応しました。
SELinux変更してもいけるみたいです。
人様の環境だったので、再起動とか、やだぁ…という安直な考えです。
ただ、コンテナに特権を与えてしまうので、
セキュリティ的なトラップはありそう。
そっと目をつむります。
- GitLab
GitLabはさらに、gitlab permission-updateを実行して、
コンテナを再起動しました。
docker-compose up -d docker exec -it <コンテナID> update-permission docker-compose down docker-compose up -d
結果GitLab内部でのPermission問題も解決し、
無事gitlab-ctl reconfigureが走って、
healthyになりました。
今では二人とも元気に起動しています。
まとめ
SELinux環境でDocker動かすときは、
Permission Deniedではまりやすいので注意!