DockerのMySQLで日本語が使えない!?

Dockerで起動したMySQLで日本語が入力出来ないんです。という質問があったので、内容の確認とその対応についてまとめてみました

$ docker run -e MYSQL\_ROOT\_PASSWORD='password' -d -p 33016:3306 mysql

$ docker exec -it <CONTAINER ID>

bash\# mysql -u root -p
Enter password: password

mysql> 日本語

とやると、「日本語」が消えてしまう(入力出来ない)というものでした

mysql> exit

# 日本語

とやっても入力出来ません、これはMySQLコンテナが使っているイメージで、日本語入力が出来る設定がされていないからです
ログインしているコンテナで日本語が入力出来ないので、MySQLに接続しても日本語入力出来ません

コンテナに日本語入力に必要な設定をしてみます
Dockerfileを作成して以下の設定をします

#使うDockerイメージ  
FROM mysql

#日本語設定  
RUN apt-get update && apt-get install -y locales  
RUN sed -i -E 's/# (ja\_JP.UTF-8)/\\1/' /etc/locale.gen && locale-gen  
ENV LANG ja\_JP.UTF-8

設定内容としては、
apt-get update → パッケージ管理のapt-getに必要な情報を取得
apt-get install -y locales → 多国語サポート用ライブラリ(locales)インストール
sed -i -E ‘s/# (ja_JP.UTF-8)/\1/’ /etc/locale.gen→日本語入力に必要なja_JP.UTF-8がコメントアウト(無効化)されているので、コメントアウトを削除(有効化)する
locale-gen → ja_JP.UTF-8の設定を作成する(locale.genファイルで有効化したあとに、locale-genコマンド実行で設定が作成される)
ENV LANG ja_JP.UTF-8 → ja_JP.UTF-8を利用する宣言をする

設定が出来たらビルド、コンテナ起動して日本語入力を試してみます

$ docker build .  
Sending build context to Docker daemon  2.048kB  
Step 1/4 : FROM mysql  
 ---> dd7265748b5d  
Step 2/4 : RUN apt-get update && apt-get install -y locales  
 ---> Using cache  
 ---> e79295695ff9  
Step 3/4 : RUN sed -i -E 's/# (ja\_JP.UTF-8)/\\1/' /etc/locale.gen && locale-gen  
 ---> Using cache  
 ---> b539a422d775  
Step 4/4 : ENV LANG ja\_JP.UTF-8  
 ---> Using cache  
 ---> 0a07da42c00e  
Successfully built 0a07da42c00e

$ docker run -e MYSQL\_ROOT\_PASSWORD='password' -d 0a07da42c00e

$ docker ps  
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES  
d6567bd48620        0a07da42c00e        "docker-entrypoint.s…"   29 seconds ago      Up 29 seconds       3306/tcp, 33060/tcp   busy\_gates

$ docker exec -it d6567bd48620 bash\

# echo 日本語  
日本語

日本語入力が出来ました。続いてMySQLでも確認してみます

# mysql -u root -p  
Enter password: passwordmysql

> 日本語;  
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '日本語' at line 1

同じく日本語入力の確認が出来ました