问题:在宿主机通过docker exec 执行pgsql的容器内的备份脚本无法成功 (第一次提问,期待提携)
一、新建容器
[root@test script]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
31130e844f71 postgis/postgis:13-3.2 "docker-entrypoint.s…" 5 days ago Up 5 days 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp pg
# 在本地写了一个pgsql的备份脚本.内容如下:
vi pgdump.sh
#!/bin/bash
pg_port=5432 # pg的端口
pg_user=postgres # pg用户
pg_dbname=test # pg数据库名字
[ -f test.tar ] && rm -f test.tar
pg_dump -U postgres -p 5432 -F t -b -v -c -x test -f ./test.tar > /dev/null 2>&1
二、将脚本拷贝到容器内/home目录下,以赋予文件777的权限
docker cp pgdump.sh pg:/home
查看有没有拷贝成功,如下可见,已成功导入,权限为777
[root@test script]# docker exec -it pg ls -l /home
total 4
-rwxrwxrwx 1 root root 266 Nov 16 10:23 pgdump.sh
三、执行脚本,没有结果返回
[root@test script]# docker exec -it pg /bin/bash /home/pgdump.sh
[root@test script]#
查看容器内也没有文件生成
[root@test script]# docker exec -it pg ls -l /home
total 4
-rwxrwxrwx 1 root root 266 Nov 16 10:23 pgdump.sh
四、进入容器内执行,可成功执行
[root@test script]# docker exec -it pg bash
root@31130e844f71:/# cd /home/
root@31130e844f71:/home# bash pgdump.sh
root@31130e844f71:/home# ls -l
total 6532
-rwxrwxrwx 1 root root 266 Nov 16 10:23 pgdump.sh
-rw-r--r-- 1 root root 6683136 Nov 16 10:39 test.tar
总结:在容器内可以执行成功,在容器外无法执行
尝试的解决方法:
写了一个简单的脚本 test.sh 如下
#! /bin/bash
[ -f /home/test.txt ] && rm -f /home/test.txt
echo "hello world " >> /home/test.txt
同样按照上面的步骤操作,
[root@test script]# docker cp test.sh pg:/home
[root@test script]# docker exec -it pg ls -l /home
total 6536
-rwxrwxrwx 1 root root 266 Nov 16 10:23 pgdump.sh
-rw-r--r-- 1 root root 99 Nov 15 16:54 test.sh
-rw-r--r-- 1 root root 6683136 Nov 16 10:39 test.tar
[root@test script]# docker exec -it pg /bin/bash /home/test.sh
[root@test script]# docker exec -it pg ls -l /home
total 6540
-rwxrwxrwx 1 root root 266 Nov 16 10:23 pgdump.sh
-rw-r--r-- 1 root root 99 Nov 15 16:54 test.sh
-rw-r--r-- 1 root root 6683136 Nov 16 10:39 test.tar
-rw-r--r-- 1 root root 13 Nov 16 10:49 test.txt
发现是可以生成 test.txt 文件的,这样看来是感觉我的备份脚本有问题,但是我进去容器又可以成功执行。求帮助