【docker-compose】mysqlのmy.cnfが反映されずにうまくいかない。windowsが原因の一つだった。

docker環境でmysqlを立てた時に、日本語に対応するようにしたかった。

だからmy.cnfを記入して日本語に対応させようとしたんだけど、なんか反映されないわ意味わかってなかったわで沼にはまった。

環境は

  • docker
  • windows 10
  • mysql 8.x

原因1: my.cnfファイルは自分で作成しないといけない

まず、docker-composeのvolumeでmy.cnfをマウントするところから沼にはまった。

こんな書き方をしていた。

  mysql:
    container_name: {container name}
    build: ./docker/mysql
    tty: true
    networks:
      yamari_net:
        aliases:
          - mysql
        ipv4_address: 172.31.0.3
    expose:
      - 3306
    volumes:
      - ./DBdata:/var/lib/mysql
      - ./conf/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_DATABASE: {DBname}

Code language: JavaScript (javascript)

こうした時にmy.cnfは勝手に作られるもんだと僕は思っていたが大間違い。

/etc/mysql/conf.d/my.cnfの読み込み(コンテナ側)を./conf/mysql/my.cnfに当てる感じになるのだが、自分でファイルを作っていなかった。

なのでまず起きたこととしては、何も読み込み元を作っていなかったために、何もないということを読み込んでいたんですね。

ああ、ややこしい。

とりあえず、mount元となるファイル、フォルダを作っていないといけないわけです。

勝手に作ってくれるというのは大間違い!

ということでえっこらえっこらmy.cnfを自分で作ります。

原因2: windowsの権限管理

my.cnfを作ってdocker-compose up!!!

したわけだけど、結局日本語対応になってねえじゃん….

よくよく調べてみれば、windowsが関係していたらしい。

my.cnfは読み取り専用じゃないといけないらしくそれができていなかった。

ということでエクスプローラーを開いて、my.cnfを右クリック>プロパティ

change mod

読み取り専用にチェックを入れます。

ほんで再起動させるとあら不思議、うまいこといっているじゃないですか!!

まとめ

  • 問題1: 自分でマウント元のファイルを作る必要があった。
  • 問題2: Windowsの関係で、my.cnfを「読み取り専用」にする必要があった

上記2点が問題でうまくいっていませんでした。

結構時間取られたんで、もう今後こんなことはないようにしたい….

2 COMMENTS

通りすがりのdocker初心者 へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA