Docker Hub の MySQL 5.6 公式イメージの設定変更したときのメモ。
変更項目
- timezone を Japan に変更
- sql_mode の STRICT_TRANS_TABLES を無効化
デフォルトの my.cnf の内容
公式イメージをそのまま起動したときの /etc/mysql/my.cnf
# # The MySQL Community Server configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html [client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql explicit_defaults_for_timestamp # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. #bind-address = 127.0.0.1 #log-error = /var/log/mysql/error.log # Recommended in standard MySQL setup sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. # !includedir /etc/mysql/conf.d/
timezone の変更
my.cnf を見ると timezone を指定している部分はありません。
その場合、OS の timezone と同じになるので、今回は Dockerfile で OS 側の timezone を Japan に変更することにします。
sql_mode の変更
my.cnf の最後で /etc/mysql/conf.d/ にある cnf ファイルをインクルードするようになっているので、試しに以下のような cnf ファイルを追加してみましたが STRICT_TRANS_TABLES は有効のままでした。
/etc/mysql/conf.d/ext_my.cnf
[mysqld] sql_mode=NO_ENGINE_SUBSTITUTION
my.cnf の sql_mode の項目を直接書き換えることで対応しました。
mysql の Dockerfile
以下が変更項目に対応した Dockerfile になります。
FROM mysql:5.6 MAINTAINER takaya030 # timezone RUN cp -p /usr/share/zoneinfo/Japan /etc/localtime # modify my.cnf RUN sed -i -e "s/^sql_mode=.*$/sql_mode=NO_ENGINE_SUBSTITUTION/" /etc/mysql/my.cnf