3 votes

Comment exécuter un script SQL dans CockroachDB à l'intérieur d'un conteneur Docker?

J'ai démarré un conteneur CockroachDB avec ce qui suit :

docker run -d --name=node1 --hostname=node1 \
--network=db -p 26257:26257 -p 8080:8080 \
-v "${PWD}/sql:/cockroach/sql" \
-v "${PWD}/cockroach-data/node1:/cockroach/cockroach-data" \ 
cockroachdb/cockroach:v2.0.1 start --insecure

Le répertoire /sql contient init.sql, qui est un script SQL que je veux que la base de données exécute, voici la commande que j'essaie de lancer :

docker exec node1 \
"/cockroach/cockroach sql --insecure < /cockroach/sql/init.sql"

Et voici l'erreur que j'obtiens :

L'exécution OCI a échoué : l'exécution a échoué : container_linux.go:348:
le démarrage du processus du conteneur a provoqué
"exec: \"/cockroach/cockroach sql --insecure < /cockroach/sql/init.sql\":
stat /cockroach/cockroach sql --insecure < /cockroach/sql/init.sql:
aucun fichier ou dossier de ce type" : inconnu

Cependant, si je fais docker exec -ti node1 /bin/bash et que je lance la même commande manuellement, ça fonctionne.

Comment puis-je exécuter cockroach sql --insecure < [mon script SQL] depuis l'extérieur du conteneur ?

3voto

Simone Zabberoni Points 1253

Selon la documentation exec:

La COMMANDE doit être exécutable, une commande enchaînée ou entre guillemets ne fonctionnera pas.

Par exemple: docker exec -ti mon_conteneur "echo a && echo b" ne fonctionnera pas, mais docker exec -ti mon_conteneur sh -c "echo a && echo b" le fera.

Vous devriez essayer:

docker exec -ti node1 \
sh -c "/cockroach/cockroach sql --insecure < /cockroach/sql/init.sql"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X