Bash / Docker exec: redirection de fichiers à partir de l'intérieur d'un conteneur

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 eu une erreur:

bash:/usr/src/app/migrations/*.sql: No such file or directory

il semble que Bash interprète ce chemin comme un chemin hôte, pas un chemin invité. Effectivement, exécuter 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 une question de Bash qu'une question de Docker, mais je suis toujours coincé! :)

25
demandé sur Jonathan Petitcolas 2015-07-15 21:17:42
la source

3 ответов

essayer et 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'
30
répondu VonC 2018-10-05 12:16:41
la source

essayez avec sh -c "your long command"

13
répondu user2915097 2015-07-15 21:29:12
la source

vous pouvez utiliser le client de base de données afin de se connecter à votre conteneur et de rediriger le fichier de base de données, alors vous pouvez effectuer la restauration.

voici un exemple avec MySQL : un conteneur tournant MySQL, en utilisant la pile réseau hôte. Puisque le conteneur utilise la pile réseau hôte( si vous n'avez aucune restriction sur votre MySQL ou n'importe quelle base de données), 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 la même chose 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"

ressemble à ce que" docker exec " ne supporte pas la redirection d'entrée.. Je vais vérifier cela et peut-être ouvrir un problème pour la communauté Docker à GitHub, si elle est applicable.

1
répondu ivanleoncz 2017-05-23 14:47:05
la source

Autres questions sur