今まで上手く動作していたmysql(ver 5.7)のコンテナが急にエラーとなり、exit1 で立ち上がらなくなりました。
構成はdocker-composeでdjango、mysql、nginxを動かしています。
# docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------
db_1 docker-entrypoint.sh exited (1) xxxx
nginx_1 nginx -g daemon off; Up xxxx
python_1 uwsgi --socket :8001 Up xxxx
$ docker-compose logs
db_1 | 2022-11-02 00:29:24+09:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
db_1 | command was: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --verbose --help --log-bin-index=/tmp/tmp.t5V1KFKTOr
db_1 | mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory)
db_1 | mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
/etc/mysql/conf.d
のディレクトリが無いよと言われています。
このディレクトリにはmy.cnf
を配置してmysqlの設定を読み込ませるところのようですが、その設定はdocker-compose.yamlのcommand
部分で渡しているので不要かと思っていました。
# docker-compose.yaml 抜粋
db:
build: ./mysql
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
ports:
- "3306:3306"
なぜ急にエラーになるようになったのかは不明ですが、docker-compose.yamlが配置してある箇所にあるmysqlディレクトリのDockerfileを次のように修正したところコンテナが立ち上がるようになりました。
# ディレクトリ構成抜粋
.
├── docker-compose.yaml
└── mysql
└── Dockerfile
# Dockerfile
FROM mysql:5.7
RUN mkdir -p /etc/mysql/conf.d # 追加
# docker-compose up -d --build
・・・・
# docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------
db_1 docker-entrypoint.sh Up xxxx
nginx_1 nginx -g daemon off; Up xxxx
python_1 uwsgi --socket :8001 Up xxxx