我尝试在 docker 容器中的 bash 函数中运行
pg_dump
,但出现错误 can't create : nonexistent directory
。该目录确实存在,因此我怀疑在函数内部运行时输出重定向 (>) 试图在主机系统上运行。当我在 bash 函数之外运行命令时,它可以工作。
请注意,psql 容器将目录
/var/lib/postgresql/backups/
映射到主机上的 /usr/share/postgresql/backups/
。
有效的命令是,
docker exec -it psql sh -c 'pg_dump -U $PG_USER MY_TABLE > /var/lib/postgresql/backups/my_table.sql
不起作用的功能
# @param $1 -- the name of the table to export
# @param $2 -- the filename to export the table to
function backup_table() {
local table_name="$1"
local output_path="/var/lib/postgresql/backups/$2"
docker exec -it psql sh -c 'pg_dump -U "$PG_USER" $table_name > $output_path'
}
backup_table MY_TABLE my_table.sql
假设
PG_USER
定义在容器内部:
backup_table() { # no function
local table_name output_path cmd
table_name="$1"
output_path="/var/lib/postgresql/backups/$2"
printf -v cmd 'pg_dump -U "$PG_USER" %q >%q'
docker exec -it psql sh -c "$cmd"
}
backup_table MY_TABLE my_table.sql