dockerで動作しているMySQLにSQLファイルを流す

dockerで起動したmysqlに対して、SQLファイルを流す方法について

ローカルのmysqlコマンドで実行

普通はdockerのport 3306をexposeして、ローカルのMySQLコマンドから実行すれば良い

mysql -u root -p < hoge.sql

なのだが、これができないケースでどうするか

docker execで実行

何があってもローカルの環境を一切汚したくないマン、またはサーバにmysqlクライアントをインストールできなくて困ってるマン向けの方法。

docker exec -it コンテナID mysql -u root -pパスワード < hoge.sql

docker execではstdin経由のデータ入力とプロンプトからのパスワードを入力を同時にできないので、コマンドラインで直接パスワードを指定しなくてはならない。

docker-composeコマンドからstdinを流し込む方法は現状ないのでdockerコマンドを使うしかない。コンテナIDは以下のコマンドで調べられる

docker-compose ps -q サービス名