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同じく日本語入力の確認が出来ました