docker exec pg_dump 在 bash 函数中

问题描述 投票:0回答:1

我尝试在 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
postgresql bash docker pg-dump
1个回答
0
投票

假设

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
© www.soinside.com 2019 - 2024. All rights reserved.