PostgreSQL创建指定用户

224 阅读1分钟

容器启动时,PostgreSQL创建指定的用户

1、添加一个初始化 SQL 文件:

在启动容器之前,在 $PWD/blog-data 目录中创建一个名为 init.sql 的文件,并在其中编写创建用户的 SQL 语句。例如,创建用户 'blog' 并授予相应权限的 SQL 语句可以如下所示:

CREATE USER blog;
ALTER USER blog WITH SUPERUSER;

然后,在你的 docker run 命令中添加 -v "PWD/init.sql":/dockerentrypointinitdb.d/init.sql选项,将该SQL文件挂载到容器的/dockerentrypointinitdb.d目录中。完整的dockerrun命令如下所示:dockerrunv"PWD/init.sql":/docker-entrypoint-initdb.d/init.sql 选项,将该 SQL 文件挂载到容器的 /docker-entrypoint-initdb.d 目录中。 完整的 docker run 命令如下所示: 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