2015-07-15 14 views
18

Non riesco a capire come leggere il contenuto di un file da un contenitore Docker. Voglio eseguire il contenuto di un file SQL nel mio contenitore PGSQL. Ho provato:Esecuzione Bash/Docker: reindirizzamento file dall'interno di un contenitore

docker exec -it app_pgsql psql --host=127.0.0.1 --username=foo foo < /usr/src/app/migrations/*.sql 

La mia applicazione è montata in /usr/src/app. Ma ho ricevuto un errore:

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

Sembra che Bash interpreti questo percorso come percorso host, non come guest. In effetti, l'esecuzione del comando in due tempi funziona perfettamente:

docker exec -it app_pgsql 
psql --host=127.0.0.1 --username=foo foo < /usr/src/app/migrations/*.sql 

Penso che sia più un problema di Bash di uno scaricatore di porto, ma io sono ancora bloccato! :)

+0

Cita l'intera stringa di comando. –

risposta

22

cercare di utilizzare una shell per eseguire quel comando

sh -c 'foo < /usr/src/app/migrations/*.sql' 

Il comando completo sarebbe:

psql --host=127.0.0.1 --username=foo sh -c 'foo < /usr/src/app/migrations/*.sql' 
10

provare con sh -c "your long command"

+0

Un po 'in ritardo;) Ma sono d'accordo. Lo uso in qualsiasi momento sia il pipe sia il reindirizzamento. – VonC

+0

Sì, eri più veloce di me :-) – user2915097

+0

SEI IL MIO SAVIYAAAAH! +1, stavo scrivendo su un file all'interno di un contenitore docker, questa tecnica ha funzionato. 'finestra mobile exec -t CONTAINER_ID sh -c 'echo" Hello World "> TestFiles/test_user/test_file.txt'' –

1

È possibile utilizzare il client di database al fine per connettersi al contenitore e reindirizzare il file del database, è possibile eseguire il ripristino.

Ecco un esempio con MySQL: un contenitore che esegue MySQL, utilizzando lo stack di rete host. Dal momento che il contenitore sta usando lo stack di rete host (se non si dispone di alcuna restrizione sul tuo MySQL o qualunque database), è possibile collegarsi tramite localhost ed eseguendo i comandi in modo trasparente

mysql -h 127.0.0.1 -u user -pyour_passwd database_name < db_backup.sql 

Si può fare lo stesso con PostgresSQL (Restore a postgres backup file using the command line?):

pg_restore --host 127.0.0.1 --port 5432 --username "postgres" --dbname "mydatabase" --no-password --clean "/home/dinesh/db/mydb.backup" 

Sembra come che "finestra mobile exec" non supporta il reindirizzamento di ingresso .. io verificare questo e magari aprire un problema per docker Comunità a GitHub, se è applicabile.

Problemi correlati