docker-composeでserviceの更新にハマった話
docker-composeでmysqlのコンテナの起動時にオプションを付加しようとしてハマったときのメモです。
docker, docker-composeのバ一ジョンは以下です。
$ docker --version Docker version 18.09.2, build 6247962 $ docker-compose --version docker-compose version 1.23.2, build unknown
問題
dockerでmysqlを動かしていてdocker-composeからも動かせるようにしたいと思いいろいろしていました。 最近のmysqlではデフォルトの認証方式が変わったらしく オプションを渡してあげなくてはいけません。これから書く問題は最初にmysqlにオプションを渡し忘れて、そこからオプションを付加して更新しようとした話です。
以下のようなdocker-compose.yml
を書いていて,
version: '3' services: mysql: image: "mysql/mysql-server" environment: - MYSQL_ROOT_HOST=% - MYSQL_ROOT_PASSWORD=password ports: - "3306:3306"
docker-compose up
をした後に<Ctrl-C>
で終了、エディタでcommand: ...
を付け足してもう一度docker-compose
... ということをしていました。
version: '3' services: mysql: image: "mysql/mysql-server" command: --default-authentication-plugin=mysql_native_password environment: - MYSQL_ROOT_HOST=% - MYSQL_ROOT_PASSWORD=password ports: - "3306:3306"
本来はこれでmysqlのデフォルトの認証方式が変わってくれるはずですが変わらなかったという問題です。
原因
原因は<Ctrl-C>
を押してもコンテナは破棄されずに停止したままだった。ということです。
なので
How to get docker-compose to always re-create containers from fresh images? - Stack Overflow に書いてあるようにコンテナを破壊してから再び実行するとserviceがうまく更新されました。
docker-compose rm -f docker-compose up
さいごに
dockerコンテナが破棄されずに残っていたという残念なオチです。
解決した後に気付いたことですが、docker-compose up
で<Ctrl-C>
を押すと出力の最後にもStopping .... done
とか出ていました。なので今後はもうすこしコマンドの出力を読むべきだなと思いました。