设想:
我有一个名为 db
的 postgres 容器在机器上运行。我在主机上的一个目录中,有一个名为 patch.sql
的 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
是否可以优雅地将其简化为单线?
我知道,如何将文件放入容器中,这正是我的解决方法。我正在考虑使用 I/O 重定向将文件放入命令中的一些技巧。
我不想挂载卷,我不能这样做,因为容器已经在运行。这个想法是避免将文件移动到容器中。
最佳答案
也许可以尝试直接管道 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
关于bash - 如何将本地文件作为参数注入(inject)到在 docker 容器中运行的命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54589130/