我有一个在 docker 容器内运行的 postgresql 数据库,并且想要使用 pgAdmin 调试该数据库上的功能。当遵循官方指南时,在我的本地 postgres 安装上执行此操作不会出现任何问题。 但是,当我对 docker 容器内的数据库尝试同样的操作时,我遇到了问题。
要调试,我需要在我的
shared_preload_libraries = '$libdir/plugin_debugger.dll'
文件中添加这一行: postgresql.conf
。
在 docker 容器中编辑文件非常简单,但是当我这样做并尝试重新启动容器时,它会向我显示以下消息:
致命:无法访问文件“$libdir/plugin_debugger.so”:没有这样的文件或目录
我尝试遵循这个要点,但是,当
git clone git://git.postgresql.org/git/pldebugger.git
执行时,我会看到以下消息
致命:远程错误:访问被拒绝或存储库未导出:/git/pldebugger.git
我正在使用官方
postgres:latest
图像。有谁知道我可以做到这一点吗?
🗎
Dockerfile
(这将安装所需的依赖项,然后从源代码构建扩展。)
FROM postgres:latest
ENV POSTGRES_DB ""
ENV POSTGRES_USER ""
ENV POSTGRES_PASSWORD ""
RUN apt-get update -q && \
apt-get install -q -y git make gcc libkrb5-dev postgresql-server-dev-16
WORKDIR /usr/share/postgresql/16/contrib
ENV USE_PGXS=1
RUN git clone https://github.com/EnterpriseDB/pldebugger.git && \
cd pldebugger && \
make
COPY setup-pg-admin.sh /docker-entrypoint-initdb.d/
🗎
setup-pg-admin.sh
(这将确保数据库启动时加载扩展。)
#!/bin/bash
cat <<EOT >> /var/lib/postgresql/data/postgresql.conf
shared_preload_libraries='/usr/share/postgresql/16/contrib/pldebugger/plugin_debugger.so'
EOT
🗎
docker-compose.yml
(这不是绝对必要的,但它展示了如何使用所需的环境变量等启动 PostgreSQL)
version: '3'
services:
data-pipeline-db:
image: data-pipeline-db
restart: always
container_name: data-pipeline-db
shm_size: 512mb
build:
context: .
dockerfile: ./Dockerfile
environment:
- POSTGRES_DB=testing
- POSTGRES_USER=test
- POSTGRES_PASSWORD=test