ぴよ丸水産

週末ファゴッティストによる技術ブログ

【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:でマウントしているファイルでした。

解決方法

docker-compose.ymlにprivileged: trueを追記で対応しました。
SELinux変更してもいけるみたいです。

人様の環境だったので、再起動とか、やだぁ…という安直な考えです。

ただ、コンテナに特権を与えてしまうので、
セキュリティ的なトラップはありそう。
そっと目をつむります。

docs.docker.jp

  • 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ではまりやすいので注意!

参考

qiita.com obel.hatenablog.jp