大抵の場合はホストにポートをバインドしているのでホストの MySQL クライアントから接続できると思うが、ポートをバインドしていなかったりホスト側に MySQL クライアントが無かったりする場合。
例
コンテナ内でサーバに接続
docker-compose exec db mysql -u admin -p
コンテナ内でデータベースに接続
docker-compose exec db mysql -u admin -p wordpress
コンテナ内でダンプしてホストで受け取る
MySQL コンテナ内では docker-compose.yml
で設定している MYSQL_PASSWORD
環境変数が存在するのでシェルから呼び出す。ホストのシェルに変数が展開されないようにする必要がある。
docker-compose exec db sh -c 'MYSQL_PWD=$MYSQL_PASSWORD mysqldump -u admin wordpress' > wordpress.sql
ホストから標準出力してコンテナ内でリストア
docker-compose exec -T db sh -c 'MYSQL_PWD=$MYSQL_PASSWORD mysql -u admin wordpress' < wordpress.sql
-pPASSWORD
でも出来るけどよろしくないので省略。