Dockerコンテナーからファイルのコンテンツを読み取る方法がわかりません。 SQLファイルのコンテンツをPGSQLコンテナに実行したい。私は試した:
docker exec -it app_pgsql psql --Host=127.0.0.1 --username=foo foo < /usr/src/app/migrations/*.sql
私のアプリケーションは/usr/src/app
。しかし、エラーが発生しました:
bash:/usr/src/app/migrations/*.sql:そのようなファイルまたはディレクトリはありません
Bashはこのパスをゲストパスではなくホストパスとして解釈しているようです。実際、コマンドを2回実行すると完全に機能します。
docker exec -it app_pgsql
psql --Host=127.0.0.1 --username=foo foo < /usr/src/app/migrations/*.sql
これはDockerの問題というよりもBashの問題だと思いますが、私はまだ立ち往生しています! :)
シェルを使用してコマンドを実行してみてください
sh -c 'psql --Host=127.0.0.1 --username=foo foo < /usr/src/app/migrations/*.sql'
完全なコマンドは次のとおりです。
docker exec -it app_pgsql sh -c 'psql --Host=127.0.0.1 --username=foo foo < /usr/src/app/migrations/*.sql'
sh -c "your long command"
データベースクライアントを使用してコンテナに接続し、データベースファイルをリダイレクトしてから、復元を実行できます。
MySQLの例:ホストネットワークスタックを使用してMySQLを実行するコンテナ。コンテナはホストネットワークスタックを使用しているため(MySQLまたはデータベースに制限がない場合)、localhost経由で接続し、コマンドを透過的に実行できます。
mysql -h 127.0.0.1 -u user -pyour_passwd database_name < db_backup.sql
PostgresSQLでも同じことができます( コマンドラインを使用してpostgresバックアップファイルを復元しますか? ):
pg_restore --Host 127.0.0.1 --port 5432 --username "postgres" --dbname "mydatabase" --no-password --clean "/home/dinesh/db/mydb.backup"
「docker exec」は入力リダイレクトをサポートしていないようです。これを確認し、該当する場合はGitHubでDockerコミュニティの問題を公開する可能性があります。