TL;DR(要約)
- サーバを再起動させて
- docker STATUSが
Exited
したら -
docker logs { コンテナID }
でログを確認 -
Permission denine
があったらSELinuxの状態を確認しよう。
記事の背景
我が家のRedmine(docker)が起動できなくなってしまいました。
Redmineが動作していた環境の構成は以下の通りです。
MacOS
+ VirtualBox - CentOS7
+ Dockerコンテナ - Redmine
+ Dockerコンテナ - MySQL
起動しなくなった契機はMacOSのフリーズによる強制再起動です。
(仮想マシンを立ち上げすぎてメモリを食いつぶしてしまいました…)
再起動後、以降は何度 docker start ...
を実行してもexitedのままです。
[admin@localhost ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9b399ccaaf1d sameersbn/redmine:latest "/sbin/entrypoint...." 3 months ago Exited (255) 3 weeks ago 443/tcp, 0.0.0.0:8081->80/tcp redmine
e6e1de5ddff7 sameersbn/mysql:latest "/sbin/entrypoint...." 3 months ago Exited (1) 3 weeks ago mysql-redmine
TL;DLに到るまでの試行錯誤メモ
コンテナログの確認
sudo docker logs { コンテナID }
で確認します。
mysql-redmineコンテナはログが出てますが、redmineコンテナは何もでてません。
[admin@localhost ~]$ sudo docker logs mysql-redmine | head
chmod: changing permissions of '/var/lib/mysql': Permission denied
chmod: cannot access '/var/lib/mysql/ibdata1': Permission denied
chmod: cannot access '/var/lib/mysql/ib_logfile1': Permission denied
chmod: cannot access '/var/lib/mysql/ib_logfile0': Permission denied
chmod: cannot access '/var/lib/mysql/auto.cnf': Permission denied
chmod: changing permissions of '/var/lib/mysql/mysql': Permission denied
chmod: cannot access '/var/lib/mysql/mysql/db.opt': Permission denied
chmod: cannot access '/var/lib/mysql/mysql/db.frm': Permission denied
chmod: cannot access '/var/lib/mysql/mysql/db.MYI': Permission denied
chmod: cannot access '/var/lib/mysql/mysql/db.MYD': Permission denied
[admin@localhost ~]$ sudo docker logs mysql-redmine | tail
chmod: cannot access '/var/lib/mysql/redmine_production/users.frm': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/auth_sources.frm': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/custom_fields_roles.frm': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/custom_fields_roles.ibd': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/roles_managed_roles.frm': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/roles_managed_roles.ibd': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/custom_field_enumerations.frm': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/custom_field_enumerations.ibd': Permission denied
chmod: cannot access '/var/lib/mysql/ib_buffer_pool': Permission denied
chmod: cannot access '/var/lib/mysql/ibtmp1': Permission denied
[admin@localhost ~]$ sudo docker logs redmine | tail
[admin@localhost ~]$
exitedしたコンテナに入って調べる
docker commit { コンテナID } { 適当に付けたコンテナ名 }
コマンドで現在のコンテナイメージを保存します。
sudo docker commit mysql-redmine broken-mysql-redmine
sudo docker commit redmine broken-redmine
docker images
で確認します。 broken-mysql-redmine
と broke-nredmine
ができていることがわかります。
[admin@localhost ~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
broken-redmine latest 240cfd127396 29 seconds ago 289 MB
broken-mysql-redmine latest bdedd7749293 About a minute ago 289 MB
docker.io/sameersbn/redmine latest c7a976e0ea70 3 months ago 817 MB
docker.io/sameersbn/mysql latest 8712d69c0eb1 8 months ago 289 MB
docker run --rm -it { 適当に付けたコンテナ名 } sh
で先ほどのエラーログで記載されているパスがどうなっているのか確認してみます。
結果、/var/lib/mysql
には何もファイルがありませんでした。
このパスはdocker の起動オプション --volume=/srv/docker/redmine/mysql:/var/lib/mysql
で指定しているパスなので、エラーログにも書かれている通り Permission denied でマウントできていないんでしょうね。
[admin@localhost ~]$ sudo docker run --rm -it broken-mysql-redmine sh
#
# ls /var/lib/mysql
#
コンテナを作り直してみよう
単純にコンテナを作り直せばなんかうまいこと行かないかなぁと思ったので、 docker container rm { コンテナ名 }
でコンテナを削除して、コンテナの再作成をしてみます。
# コンテナの削除
[admin@localhost ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9b399ccaaf1d sameersbn/redmine:latest "/sbin/entrypoint...." 3 months ago Exited (255) 3 weeks ago 443/tcp, 0.0.0.0:8081->80/tcp redmine
e6e1de5ddff7 sameersbn/mysql:latest "/sbin/entrypoint...." 3 months ago Exited (1) About an hour ago mysql-redmine
[admin@localhost ~]$ sudo docker container rm mysql-redmine
mysql-redmine
[admin@localhost ~]$ sudo docker container rm redmine
redmine
[admin@localhost ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[admin@localhost ~]$
# コンテナの再作成
[admin@localhost ~]$ sudo docker run --name=mysql-redmine -d --volume=/srv/docker/redmine/mysql:/var/lib/mysql sameersbn/mysql
a955c46716ef040ce9934ae6c6f0fd68ba50cb0adb0f5850cb2a945445a3317f
# 起動確認
[admin@localhost ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a955c46716ef sameersbn/mysql "/sbin/entrypoint...." 15 seconds ago Exited (1) 14 seconds ago mysql-redmine
[admin@localhost ~]$
[admin@localhost ~]$ sudo docker logs mysql-redmine | tail
chmod: cannot access '/var/lib/mysql/redmine_production/users.frm': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/auth_sources.frm': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/custom_fields_roles.frm': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/custom_fields_roles.ibd': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/roles_managed_roles.frm': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/roles_managed_roles.ibd': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/custom_field_enumerations.frm': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/custom_field_enumerations.ibd': Permission denied
chmod: cannot access '/var/lib/mysql/ib_buffer_pool': Permission denied
chmod: cannot access '/var/lib/mysql/ibtmp1': Permission denied
うーん、やっぱダメですね。
権限を確認してみる
Dockerがマウントする予定の /srv/docker/redmine/mysql
のパーミッションを確認してみます。
あれ。mysqlフォルダのパーミッション drwx------
になってる。 (注意:これであってます!)
redmineフォルダと同じように drwxr-xr-x
にしてみましょう。 (注意:やっちゃダメです!!)
[admin@localhost redmine]$ pwd
/srv/docker/redmine
[admin@localhost redmine]$ ll
合計 0
drwx------. 6 101 101 187 6月 16 22:39 mysql
drwxr-xr-x. 8 1000 1000 90 8月 12 16:56 redmine
[admin@localhost redmine]$ sudo chmod -R 755 mysql/
[admin@localhost redmine]$ ll
合計 0
drwxr-xr-x. 6 101 101 187 6月 16 22:39 mysql
drwxr-xr-x. 8 1000 1000 90 8月 12 16:56 redmine
さて、起動確認をしてみます。…やっぱりダメですねぇ。
[admin@localhost redmine]$ sudo docker start mysql-redmine
mysql-redmine
[admin@localhost redmine]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[admin@localhost redmine]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a955c46716ef sameersbn/mysql "/sbin/entrypoint...." 5 minutes ago Exited (1) 5 seconds ago mysql-redmine
[admin@localhost mysql]$ sudo docker logs mysql-redmine | tail
chmod: cannot access '/var/lib/mysql/redmine_production/users.frm': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/auth_sources.frm': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/custom_fields_roles.frm': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/custom_fields_roles.ibd': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/roles_managed_roles.frm': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/roles_managed_roles.ibd': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/custom_field_enumerations.frm': Permission denied
chmod: cannot access '/var/lib/mysql/redmine_production/custom_field_enumerations.ibd': Permission denied
chmod: cannot access '/var/lib/mysql/ib_buffer_pool': Permission denied
chmod: cannot access '/var/lib/mysql/ibtmp1': Permission denied
もう777にしちゃえ! (注意: やっちゃダメです!!)
エラーに出てるファイル自体は存在はしているので、user名が変わってる?
とりあえずパーミッションを777にしてみます。これで上手くいけばパーミッションの問題でしょう。
[admin@localhost mysql]$ pwd
/srv/docker/redmine/mysql
[admin@localhost mysql]$ ll
合計 188464
-rwxr-xr-x. 1 101 101 56 6月 16 22:38 auto.cnf
-rwxr-xr-x. 1 101 101 313 6月 16 22:39 ib_buffer_pool
-rwxr-xr-x. 1 101 101 50331648 8月 15 11:54 ib_logfile0
-rwxr-xr-x. 1 101 101 50331648 6月 16 22:38 ib_logfile1
-rwxr-xr-x. 1 101 101 79691776 8月 15 11:54 ibdata1
-rwxr-xr-x. 1 101 101 12582912 8月 12 17:28 ibtmp1
drwxr-xr-x. 2 101 101 4096 6月 16 22:38 mysql
drwxr-xr-x. 2 101 101 8192 6月 16 22:38 performance_schema
drwxr-xr-x. 2 101 101 8192 6月 16 22:39 redmine_production
drwxr-xr-x. 2 101 101 8192 6月 16 22:39 sys
# パーミッションを777に変更
[admin@localhost redmine]$ pwd
/srv/docker/redmine
[admin@localhost redmine]$ sudo chmod -R 777 mysql/
[admin@localhost redmine]$ ll mysql/
合計 188464
-rwxrwxrwx. 1 101 101 56 6月 16 22:38 auto.cnf
-rwxrwxrwx. 1 101 101 313 6月 16 22:39 ib_buffer_pool
-rwxrwxrwx. 1 101 101 50331648 8月 15 11:54 ib_logfile0
-rwxrwxrwx. 1 101 101 50331648 6月 16 22:38 ib_logfile1
-rwxrwxrwx. 1 101 101 79691776 8月 15 11:54 ibdata1
-rwxrwxrwx. 1 101 101 12582912 8月 12 17:28 ibtmp1
drwxrwxrwx. 2 101 101 4096 6月 16 22:38 mysql
drwxrwxrwx. 2 101 101 8192 6月 16 22:38 performance_schema
drwxrwxrwx. 2 101 101 8192 6月 16 22:39 redmine_production
drwxrwxrwx. 2 101 101 8192 6月 16 22:39 sys
もう、ログを転記するのも冗長なので飛ばしますが、結果は変わらずです。
mysqlフォルダを消してみる?
ならもう1から作り直せば起動できるでしょう。
と言うことで、もともとのmysqlフォルダをリネームしました。
# もともとのmysqlフォルダをリネーム(Docker的には削除されたのと同意)
[admin@localhost redmine]$ sudo mv mysql/ old_mysql
[admin@localhost redmine]$ ls -l
合計 0
drwxrwxrwx. 6 101 101 187 6月 16 22:39 old_mysql
drwxr-xr-x. 8 1000 1000 90 8月 12 16:56 redmine
# mysql-redmineコンテナを起動するが、Excited…
[admin@localhost ~]$ sudo docker start mysql-redmine
[admin@localhost ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
45add7787f7c sameersbn/mysql "/sbin/entrypoint...." About a minute ago Exited (1) About a minute ago mysql-redmine
# フォルダ確認
[admin@localhost redmine]$ pwd
/srv/docker/redmine
[admin@localhost redmine]$ ll
合計 0
drwxr-xr-x. 2 root root 6 9月 22 23:02 mysql
drwxrwxrwx. 6 101 101 187 6月 16 22:39 old_mysql
drwxr-xr-x. 8 1000 1000 90 8月 12 16:56 redmine
結果、新しくmysql フォルダが作成されましたが、起動できません。
imageごと削除して作り直してみる。
いくらなんでもこれなら起動するでしょう…
# イメージを削除
[admin@localhost redmine]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
45add7787f7c sameersbn/mysql "/sbin/entrypoint...." 5 minutes ago Exited (1) 3 minutes ago mysql-redmine
[admin@localhost redmine]$ sudo docker rm mysql-redmine
mysql-redmine
[admin@localhost redmine]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
broken-redmine latest 78d7ca891d27 About an hour ago 820 MB
broken-mysql-redmine latest bdedd7749293 About an hour ago 289 MB
docker.io/sameersbn/redmine latest c7a976e0ea70 3 months ago 817 MB
docker.io/sameersbn/mysql latest 8712d69c0eb1 8 months ago 289 MB
[admin@localhost redmine]$ sudo docker rmi 8712d69c0eb1
Error response from daemon: conflict: unable to delete 8712d69c0eb1 (cannot be forced) - image has dependent child images
[admin@localhost redmine]$ sudo docker rmi bdedd7749293
Untagged: broken-mysql-redmine:latest
Deleted: sha256:bdedd774929362894e31d9dc12820c9f3277326dc9419fbcea995918e800b6f1
Deleted: sha256:213ae438dcfad5e2b402cc8d4f0924ac81ca24af72631578642a68f03a97cb2e
[admin@localhost redmine]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[admin@localhost redmine]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
broken-redmine latest 78d7ca891d27 About an hour ago 820 MB
docker.io/sameersbn/redmine latest c7a976e0ea70 3 months ago 817 MB
docker.io/sameersbn/mysql latest 8712d69c0eb1 8 months ago 289 MB
[admin@localhost redmine]$ sudo docker rmi 8712d69c0eb1
Untagged: docker.io/sameersbn/mysql:latest
Untagged: docker.io/sameersbn/mysql@sha256:08803923a08423795030779398a8e6454c971d7ba93aec3c0ce68ce47f8f5b1b
Deleted: sha256:8712d69c0eb183c9c1a7041b2b7175b3672a465b1ba427c3595f120e6f0bcb91
Deleted: sha256:f94a642c7a822e01d22cbee3fec136486642f8e5f8e98a429a450a2ed16c8103
Deleted: sha256:b995a27c90f15a45c0cba4ea4ad94e1ab88e80980538406a55514bb94a66873b
Deleted: sha256:765ac5b1eddc9d2dfd2c644e0daf680e623c415e2ba7b5f7589920bb53c62d5f
Deleted: sha256:3288cd6e6e7d42bcb4a74121b412c42a11f96da52685e42dbf9de6a747a55c6b
Deleted: sha256:b1636589630239bdb9153f95ac564bcd2afd9202aaf8511cbf5a9a37e03daf35
Deleted: sha256:043f492f40c539cfe7cee4cb8aae00ed1d5b19e864fbe6ea35ec92a2333bacc4
Deleted: sha256:2fb7bfc6145d0ad40334f1802707c2e2390bdcfc16ca636d9ed8a56c1101f5b9
コンテナもイメージも削除し終わったので、イメージの取得からやり直して起動してみますが…
これでもダメ。うそやん…
[admin@localhost redmine]$ sudo docker run --name=mysql-redmine -d --volume=/srv/docker/redmine/mysql:/var/lib/mysql sameersbn/mysql
Unable to find image 'sameersbn/mysql:latest' locally
Trying to pull repository docker.io/sameersbn/mysql ...
latest: Pulling from docker.io/sameersbn/mysql
5b7339215d1d: Pull complete
14ca88e9f672: Pull complete
a31c3b1caad4: Pull complete
b054a26005b7: Pull complete
90fea30f4edb: Pull complete
51eaeddaa0eb: Pull complete
Digest: sha256:cc4bfd33e0a4100b31cb868f5671c11a910633a0c09c5e5f9f7eb8d51787da3d
Status: Downloaded newer image for docker.io/sameersbn/mysql:latest
c9fc7ea0557d50744483a5dcdd0ad535eb1386603482682e546373c14854ae1b
[admin@localhost redmine]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[admin@localhost redmine]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c9fc7ea0557d sameersbn/mysql "/sbin/entrypoint...." 29 seconds ago Exited (1) 29 seconds ago mysql-redmine
[admin@localhost redmine]$ sudo docker logs mysql-redmine
chmod: changing permissions of '/var/lib/mysql': Permission denied
SELinuxだった
Dockerコンテナを1から作ってダメと言うことは環境問題の可能性が高いです。
そういえばDockerを起動しているホストOSはCnetOS7だった。
CentOSはデフォルトだとSELinuxがenableになっていますが、私はまだSELinuxと友達になれていないので確か永続的にdisableにしていたはず。
getenforce
コマンドで確認してみます。
Enforcing
めっちゃSELinuxさん働いてるやん…
# SELinuxの状態を確認
[admin@localhost redmine]$ getenforce
Enforcing
# SELinuxを一時的にdisable
[admin@localhost redmine]$ sudo setenforce 0
[admin@localhost redmine]$ getenforce
Permissive
# dockerコンテナの起動… 起動!!
[admin@localhost redmine]$ sudo docker start mysql-redmine
mysql-redmine
[admin@localhost redmine]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d348d9414d8 sameersbn/mysql "/sbin/entrypoint...." 3 minutes ago Up 4 seconds 3306/tcp mysql-redmine
パーミッションを元に戻そう
さっき /srv/docker/redmine/mysql
配下のパーミッションを全部777にしてしまったのでパーミッションを元に戻します。
確認したところ /srv/docker/redmine/mysql
配下のパーミッションはUser,Groupが101:101
、ディレクトリが750
、ファイルが640
でしたので元に戻します。
[root@localhost mysql]# chmod -R 640 *
[root@localhost mysql]# chmod 750 mysql/
[root@localhost mysql]# chmod 750 performance_schema/
[root@localhost mysql]# chmod 750 redmine_production/
[root@localhost mysql]# chmod 750 sys
[root@localhost mysql]# ll
合計 122916
-rw-r-----. 1 101 101 56 9月 22 23:19 auto.cnf
-rw-r-----. 1 101 101 312 9月 22 23:19 ib_buffer_pool
-rw-r-----. 1 101 101 50331648 9月 22 23:19 ib_logfile0
-rw-r-----. 1 101 101 50331648 9月 22 23:19 ib_logfile1
-rw-r-----. 1 101 101 12582912 9月 22 23:19 ibdata1
-rw-r-----. 1 101 101 12582912 9月 22 23:19 ibtmp1
drwxr-x---. 2 101 101 4096 9月 22 23:19 mysql
drwxr-x---. 2 101 101 8192 9月 22 23:19 performance_schema
drwxr-x---. 2 101 101 20 9月 22 23:19 redmine_production
drwxr-x---. 2 101 101 8192 9月 22 23:19 sys
コンテナ起動
# MySQLコンテナ起動
`/srv/docker/redmine/mysql` 配下のパーミッションsudo docker run --name=mysql-redmine -d --env='DB_NAME=redmine_production' --env='DB_USER=redmine' --env='DB_PASS=password' --volume=/srv/docker/redmine/mysql:/var/lib/mysql sameersbn/mysql
# Redmineコンテナ起動
`/srv/docker/redmine/mysql` 配下のパーミッションsudo docker run --name=redmine -d --link=mysql-redmine:mysql \
--volume=/srv/docker/redmine/redmine:/home/redmine/data \
sameersbn/redmine
sudo docker run --name=redmine -p 8081:80 -d --link=mysql-redmine:mysql --volume=/srv/docker/redmine/redmine:/home/redmine/data sameersbn/redmine
# Dockerコンテナ状態確認
[admin@localhost redmine]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b1f5657e1e8 sameersbn/redmine "/sbin/entrypoint...." 13 seconds ago Up 12 seconds 443/tcp, 0.0.0.0:8081->80/tcp redmine
7b3202290f17 sameersbn/mysql "/sbin/entrypoint...." 14 minutes ago Up 14 minutes 3306/tcp mysql-redmine
やったー。復旧したぞー。