どうして情報がないのか。たどり着けていないのか。はたまたバッドノウハウなのか。
環境
・Docker
・Rails(Dockerコンテナ)
・PostgreSQL(Dockerコンテナ)
やりたいこと
Railsのコンテナ内部からコマンドでSQLをダンプしてアプリコンテナ内に保存する。
必要だったこと
・アプリ(Rails)コンテナ内にもPostgreSQLをインストールしておく
・PostgreSQL saidのバージョンをアプリコンテナとDBコンテナで揃えておく
※Docker+Rails+PostgreSQLで環境が立ち上がっている前提。
※ウェブサーバーは別コンテナでNginXを用意した。
動作確認用にアプリコンテナにログインしてみる
$ docker-compose exec [アプリコンテナ名] bash
PostgreSQLのダンプファイルを書き出し
$ pg_dump -h [DBコンテナ名] [データベース名] > [書き出しファイル名]
pg_dump時には必ずパスワードを求められるので docker-compose.ymlに環境変数「PGPASSWORD」を追加しとく。
docker-compose.yml
environment:
PGPASSWORD: 'hogehogefugafuga1212'
コンテナ再起動
$ docker-compose restart
あとはコンテナ内部に保存されたダンプファイルをRailsから参照してPOSTリクエストでダウンロードできるようにする。
→Railsにエクスポート画面つくって、controllerに上記のダンプ処理を実行するようにsystemコマンドを書いてルーティングすれば完成。
つまづいたところ
・docker-compose run とdocker-compose execの違い
・Ubuntu(Vagrant環境)のaptが古い(updateしてもPostgreSQL13が入らない)
・Docker imageで入れたバージョンとDockerfileで指定したバージョンの競合
・コンテナ間でのpsqlでのアクセス