Как добавить локальный файл в качестве аргумента команды для запуска внутри контейнера Docker? - PullRequest
0 голосов
/ 08 февраля 2019

Сценарий:

У меня есть контейнер postgres с именем db, работающий на машине.Я нахожусь в каталоге на хосте и у меня есть сценарий SQL с именем patch.sql.Я хотел бы применить этот сценарий к базе данных внутри контейнера.

Если бы я был внутри контейнера и имел сценарий также внутри контейнера, я бы запустил

psql -U user -d db -f patch.sql

Так как явне контейнера я наивно мог бы попытаться

docker exec -i db psql -U user -d db -f patch.sql

, но, конечно, для этого нужно было бы найти файл с именем patch.sql внутри контейнера, в то время как он фактически находится на хост-компьютере.

Мой текущий обходной путь -

cat patch.sql | docker exec -i db /bin/sh -c "cat $@ > patch.sql"
docker exec -i db psql -U user -d db -f patch.sql
docker exec -i db rm patch.sql

Можно ли элегантно уменьшить это до однострочного?

Я знаю, как разместить файл внутри контейнера, это именно то, что мойобходной путь делает.Я подумываю о некоторой хитрости с перенаправлением ввода-вывода для помещения файла в команду.

Я не хочу монтировать тома и не могу этого сделать, так как контейнер уже работает в любом случае.Идея состоит в том, чтобы избежать перемещения файла в контейнер.

1 Ответ

0 голосов
/ 08 февраля 2019

Может быть, можно попробовать напрямую передать содержимое файла patch.sql в psql, например

cat patch.sql | docker exec -i db psql -U user -d db -f -

или просто

cat patch.sql | docker exec -i db psql -U user -d db
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...