23
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DockerのMySQLの環境変数系の設定が反映されないのは余計なデータベースをマウントしているから

Posted at

docker-composeのmysql: environment: の設定が反映されない!

ぺーぺーの筆者もようやくDockerに触る機会ができ、早速docker-composeを使って公式のMySQLを利用して環境を作ろうとしました。

この際、rootのパスワードも変更したかったため、docker-compose.ymlは最終的にこんな感じになりました。

docker-compose.yml
version: '2'
services:
#(前略)
  mysql:
    image: "mysql"
    environment:
      MYSQL_ROOT_PASSWORD: NantokaKantoka
        #最初のうちはhogefugaを設定していた
      MYSQL_DATABASE: myDatabase
  volumes:
    - ./mysql/conf.d:/etc/mysql/conf.d
         #mysql.cnfを反映させるため
    - ./mysql/data:/var/lib/mysql
         #DBの実体をおいておく
    - ./mysql/init:/docker-entrypoint-initdb.d
         #MySQL初回起動時の走らせたいsqlとかshとかを渡すため
#(後略)

この設定なら、myDatabaseというデータベースが作られた上、rootログインする時にはNantokaKantokaというパスワードが必要になるはずでした。

ですが実際にはmyDatabaseは作られずパスワードは最初のうちに設定していたhogefugaのまま変更されないという事態になりました。

docker-compose downとかdocker rm $(docker ps -aq)とか色々やっても何回やってもこの現象に悩まされました。

公式のMySQLイメージは起動時に既存のDBをいじらない

いろいろ探し回った末に公式のmysqlイメージのページを参照してみることにした結果原因がわかりました。

問題の箇所の原文と和訳を記します。

Environment Variables
When you start the mysql image, you can adjust the configuration of the MySQL instance by passing one or more environment variables on the docker run command line. Do note that none of the variables below will have any effect if you start the container with a data directory that already contains a database: any pre-existing database will always be left untouched on container startup.

環境変数
mysqlのイメージを起動する際に、docker runコマンドラインにいくつかの環境変数を渡すことで、MySQLインスタンスの設定を調整できます。もし既にデータベースを格納しているデータディレクトリとともにコンテナを起動した場合は、下記の変数はどれも影響を及ぼさないことに留意してください。コンテナが起動する際には既存のデータベースには常に何の変更も加えません。

大事なとこここです。

もし既にデータベースを格納しているデータディレクトリとともにコンテナを起動した場合は、下記の変数はどれも影響を及ぼさないことに留意してください。

つまり原因はここです。

docker-compose.yml
    - ./mysql/data:/var/lib/mysql
         #DBの実体をおいておく

こいつにもともとデータベースがあったためにパスワードなどの変更を加えることができず、結果最初の方に設定していたhogefugaがパスワードとして残り続けたんですね。

myDatabaseのデータベースが作られなかったのも同様の理由です。

解決

rm -rf ./mysql/data/* ; docker-compose up -d

docker execでコンテナに入ると、無事パスワードが変更され、データベースも作られていることを確認できました。

結論

公式をあたれ

23
17
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
23
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?