LoginSignup
0
1

MySQLコンテナ内で日本語が入力できない

Last updated at Posted at 2023-05-21

動作環境

  • Windows11
  • Docker version 20.10.23

詰まったこと

データベースの学習のためにDockerにてMySQL環境を構築しました。ところが、コンテナに入った状態でコマンドライン上に日本語を入力してエンターを押すと、入力した日本語が消えるといった事象に出くわしました。日本語のサンプルデータを扱えなくて困りました。。

解決策

もともとはcompose.ymlでイメージを指定して環境構築していましたが、ビルド時にパッケージをインストールする処理が必要になるのでDockerfileも用意します。

ポイントは以下の通りです。

  1. イメージにmysql:8.0-debianを指定
    apt-getコマンド(APTパッケージ管理システム)を使用するには、ベースイメージにDebianUbuntuを指定する必要があります。
    mysql:8.0ではapt-getが使えず、ビルド中にエラーになります。

  2. locales-allのインストールコマンドを記述
    ロケールとは国・地域等によって違うタイムゾーンや書式等をシステムに伝える機能です。
    ロケールを日本語化するためにパッケージのインストールが必要です。

  3. 環境変数LANGja_JP.UTF-8を設定
    これで実際にコンテナ内のロケールが日本語化されます。

FROM mysql:8.0-debian

RUN apt-get update \
    && apt-get install -y \
        locales-all \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \

ENV TZ=Asia/Tokyo
ENV LANG ja_JP.UTF-8

compose.ymlの内容です。

version: "3.9"

services:
  db:
    build:
      context: .
      dockerfile: ./docker/db/Dockerfile
    restart: always
    ports:
      - 3306:3306
    env_file:
      - ./docker/db/.env
    volumes:
      - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./docker/db/data:/var/lib/mysql
      - ./docker/db/init.sql:/docker-entrypoint-initdb.d/init.sql

ディレクトリ構成も載せておきます。

.
├── .gitignore
├── compose.yml
└── docker
    └── db
        ├── .env
        ├── Dockerfile
        ├── data
        │   └── .gitkeep
        ├── init.sql
        └── my.cnf

あとがき

学習環境として利用していたので、コマンドやファイル等、今回の件と関係ないものも色々ありますがご了承ください。
間違っている部分やアドバイス等がありましたら、ご教授いただけますと幸いです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1