刘高568 2022-11-16 10:56 采纳率: 0%
浏览 40

在宿主机通过docker exec 执行pgsql的容器内的备份脚本无法成功

问题:在宿主机通过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 文件的,这样看来是感觉我的备份脚本有问题,但是我进去容器又可以成功执行。求帮助

  • 写回答

2条回答 默认 最新

  • weixin_44670774 2022-11-16 12:17
    关注

    脚本的最后一行>>/dev/null 2>&1 会导致任何输出都没有,可以去掉之后执行一下,看看有什么报错。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月16日

悬赏问题

  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元