Debianベースのコンテナで日本語入力ができなかった時の話
概要
DockerやPHPの勉強にと作成したLaravelプロジェクトにて、
MySQLをコマンドラインで操作しようとした際に日本語を入力できなかったので入力できるようにしました。
事象
テストデータを入れようとした時のこと、
テストデータ作成にちょうど良さそうなスプレッドシートがあったのでそのセルをコピーし
MySQLを起動しペーストしてみたところ、日本語部分のみ消えてしまいました。
(イメージ)
ペースト!(この時すでに日本語が消えている)
mysql> Insert into hoge (title, created_at, updated_at) values ('hoge', NOW(), NOW());
mysql> select * from hoge;
+-----+-----------------+---------------------+---------------------+
| id | title | created_at | updated_at |
+-----+-----------------+---------------------+---------------------+
| 1 | hoge | 2019-07-06 05:51:22 | 2019-07-06 05:51:22 |
+-----+-----------------+---------------------+---------------------+
1 row in set (0.00 sec)
対応
MySQL内については、ちゃんと文字コード指定してあるし
Googleログイン機能を導入した際に(https://qiita.com/enuswi/items/0a24b09ed6e961c3beab)
日本語が登録されることは確認済みでしたので少し困惑したのですが、
調べてみるとどうやらDebian側で設定が必要とのことでしたので
Dockerfileを書き換えてみました。
フォルダ構成
.
├── mysql
│ ├── Dockerfile
│ ├── my.cnf
│ └── etc
│ └── locale.gen (新規に追加)
├── nginx
│ └── default.conf
├── php
│ └── Dockerfile
├── docker-compose.yml
└── src (laravel project)
Dockerfileの追加項目
* vim、locales、locales-allパッケージの追加
* 「ja_JP.UTF-8 UTF-8」の行のみ有効にしたlocale.genをetc以下に配置
* ロケールの生成・設定の更新
FROM mysql:5.7
# 追加ここから
RUN apt-get update \
&& apt-get install -y \
vim \
locales \
locales-all
ADD ./etc/locale.gen /etc/locale.gen
RUN locale-gen \
update-locale
# 追加ここまで
ADD ./my.cnf /etc/mysql/conf.d/my.cnf
CMD ["mysqld"]
# (略)
# iu_CA UTF-8
# ja_JP.EUC-JP EUC-JP
ja_JP.UTF-8 UTF-8
# ka_GE GEORGIAN-PS
# ka_GE.UTF-8 UTF-8
# (略)
以上修正したら、
ビルドし直してコンテナに入り直すとコマンドラインで日本語が使えるようになりました。
元々の状態だとMySQLに限らずコンテナ自体で日本語が使えてなかったのですが上記の修正にて使用できるようになりました。
ペースト!
mysql> Insert into hoge (title, created_at, updated_at) values ('hogeについて', NOW(), NOW());
mysql> select * from hoge;
+-----+-----------------+---------------------+---------------------+
| id | title | created_at | updated_at |
+-----+-----------------+---------------------+---------------------+
| 1 | hogeについて | 2019-07-06 05:51:22 | 2019-07-06 05:51:22 |
+-----+-----------------+---------------------+---------------------+
1 row in set (0.00 sec)
最後に
今回は、mysql用のコンテナで対応しましたが、
本来は作業用のコンテナを作ってそこで対応するべきなんだろうなと思います。
(laradocのworkspaceコンテナみたいな)
参考
Author And Source
この問題について(Debianベースのコンテナで日本語入力ができなかった時の話), 我々は、より多くの情報をここで見つけました https://qiita.com/enuswi/items/abef184c5ba4d76b4180著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .