Je ne peux pas comprendre comment lire le contenu d'un fichier à partir d'un conteneur Docker. Je veux exécuter le contenu d'un fichier SQL dans mon conteneur PGSQL. J'ai essayé:
docker exec -it app_pgsql psql --Host=127.0.0.1 --username=foo foo < /usr/src/app/migrations/*.sql
Mon application est montée dans /usr/src/app
. Mais j'ai une erreur:
bash: /usr/src/app/migrations/*.sql: aucun fichier ou répertoire de ce type
Il semble que Bash interprète ce chemin comme un chemin d'hôte, pas un chemin invité. En effet, l'exécution de la commande en deux temps fonctionne parfaitement:
docker exec -it app_pgsql
psql --Host=127.0.0.1 --username=foo foo < /usr/src/app/migrations/*.sql
Je pense que c'est plus un problème Bash qu'un problème Docker, mais je suis toujours bloqué! :)
Essayez d'utiliser un shell pour exécuter cette commande
sh -c 'psql --Host=127.0.0.1 --username=foo foo < /usr/src/app/migrations/*.sql'
La commande complète serait:
docker exec -it app_pgsql sh -c 'psql --Host=127.0.0.1 --username=foo foo < /usr/src/app/migrations/*.sql'
essayez avec sh -c "your long command"
Vous pouvez utiliser le client de base de données pour vous connecter à votre conteneur et rediriger le fichier de base de données, puis vous pouvez effectuer la restauration.
Voici un exemple avec MySQL : un conteneur exécutant MySQL, utilisant la pile réseau Host. Étant donné que le conteneur utilise la pile du réseau hôte (si vous n'avez aucune restriction sur votre base de données MySQL ou autre), vous pouvez vous connecter via localhost et exécuter les commandes de manière transparente
mysql -h 127.0.0.1 -u user -pyour_passwd database_name < db_backup.sql
Vous pouvez faire de même avec PostgresSQL ( Restaurer un fichier de sauvegarde postgres en utilisant la ligne de commande? ):
pg_restore --Host 127.0.0.1 --port 5432 --username "postgres" --dbname "mydatabase" --no-password --clean "/home/dinesh/db/mydb.backup"
On dirait que "docker exec" ne prend pas en charge la redirection d'entrée .. Je vais vérifier cela et peut-être ouvrir un problème pour Docker Community sur GitHub, si cela est applicable.