容器启动时,PostgreSQL创建指定的用户
1、添加一个初始化 SQL 文件:
在启动容器之前,在 $PWD/blog-data 目录中创建一个名为 init.sql 的文件,并在其中编写创建用户的 SQL 语句。例如,创建用户 'blog' 并授予相应权限的 SQL 语句可以如下所示:
CREATE USER blog;
ALTER USER blog WITH SUPERUSER;
然后,在你的 docker run 命令中添加 -v "PWD/blog-data":/var/lib/postgresql/data -v "$PWD/init.sql":/docker-entrypoint-initdb.d/init.sql -p 5432:5432 -e POSTGRES_USER=blog -e POSTGRES_HOST_AUTH_METHOD=trust -d postgres:12.2
这样做将确保在容器启动时使用 init.sql 文件中的 SQL 命令创建指定的用户。
2、使用自定义 Dockerfile:
创建一个自定义的 Dockerfile,基于 PostgreSQL 镜像并添加指定用户的步骤。下面是一个示例 Dockerfile:
FROM postgres:12.2
ENV POSTGRES_USER blog
ENV POSTGRES_HOST_AUTH_METHOD trust
COPY init.sql /docker-entrypoint-initdb.d/
RUN set -e \
&& sed -ri "s/^#(create_main_cluster) .*$/\1 = false/" /usr/local/bin/docker-entrypoint.sh
EXPOSE 5432
在上述 Dockerfile 中,我们将 POSTGRES_USER 环境变量设置为 'blog',并将 init.sql 文件复制到 /docker-entrypoint-initdb.d/ 目录中。还修改了 /usr/local/bin/docker-entrypoint.sh 文件,以便创建主集群时不会强制执行初始化脚本。 然后,可以使用以下命令构建自定义镜像:
docker build -t my-postgres .
最后,使用以下命令启动容器:
docker run -v "$PWD/blog-data":/var/lib/postgresql/data -p 5432:5432 -d my-postgres