Docker环境CentOS7下yum安装PostgreSQL客户端后找不到psql命令问题问询
问题1:无root权限在CentOS Docker镜像中定位PostgreSQL客户端安装位置的方法
- 使用rpm查询已安装包的文件列表,不需要root权限:
rpm -ql postgresql,如果安装的是带版本号的包(如postgresql15)替换为对应包名即可。如果要直接过滤出psql可执行文件,可以执行rpm -ql postgresql | grep bin/psql - 全局搜索用户有读权限的目录:
find / -name psql -type f -executable 2>/dev/null,将错误输出丢弃可以屏蔽无权限访问目录的报错信息,系统公共目录普通用户默认有读权限,足够定位到可执行文件 - 查看yum安装日志确认包名:普通用户可读
/var/log/yum.log,搜索PostgreSQL相关安装记录,确认实际安装的包名,避免因包名不匹配导致找不到文件
问题2:Dockerfile中可添加的打印安装路径的命令
在yum安装PostgreSQL的命令后追加对应打印命令即可,镜像构建时会直接在日志中输出结果:
- 基于rpm查询打印:
RUN yum install -y postgresql \ && echo "psql可执行文件路径:$(rpm -ql postgresql | grep bin/psql)" \ && echo "PostgreSQL bin目录路径:$(rpm -ql postgresql | grep '/bin$')"
- 基于全局搜索打印:
RUN yum install -y postgresql \ && find / -name psql -type f -executable 2>/dev/null | xargs echo "psql可执行文件路径:"
- 额外可以打印当前PATH变量,方便排查路径未生效问题:
RUN echo "当前系统PATH变量:$PATH"
注意:Docker镜像内安装的软件仅存在于容器文件系统中,宿主机默认不会有对应的可执行文件。如果需要在宿主机直接调用psql,要么在宿主机单独安装PostgreSQL客户端,要么通过
docker exec 容器名 psql的方式调用容器内的客户端。
内容的提问来源于stack exchange,提问作者90abyss
相关产品推荐
相关产品推荐

