Docker postgres 不运行 docker-entrypoint-initdb.d 中的 init 文件

postgresql

1个回答

写回答

13690277845

2025-07-09 21:05

+ 关注

PostgreSQL
PostgreSQL

在使用 Docker 部署 PostgreSQL 数据库时,我们通常会将初始化脚本放置在容器的 /docker-entrypoint-initdb.d 目录中,以便在容器启动时自动运行这些脚本来初始化数据库。然而,有时我们希望禁止 Docker 运行该目录中的特定脚本文件。本文将探讨如何通过修改 Dockerfile 来实现这一目标,并提供相应的案例代码。

什么是 Dockerfile?

Dockerfile 是用于构建 Docker 镜像的文本文件,其中包含了一系列的指令和配置,用于描述如何构建镜像。通过编写 Dockerfile,我们可以自定义镜像的环境和配置,以满足特定需求。

禁止运行 init 文件

要禁止 Docker 运行 docker-entrypoint-initdb.d 目录中的 init 文件,我们可以通过修改 Dockerfile 中的 CMD 指令来实现。具体方法是在 CMD 指令中添加一个参数来覆盖默认的启动命令。

以下是一个示例的 Dockerfile:

dockerfile

FROM postgres:latest

COPY init.sql /docker-entrypoint-initdb.d/

CMD ["postgres", "-c", "shared_preload_libraries=''"]

在这个示例中,我们从 postgres:latest 基础镜像开始构建我们的镜像。然后,我们将一个名为 init.sql 的初始化脚本文件复制到容器的 /docker-entrypoint-initdb.d/ 目录中。最后,我们通过在 CMD 指令中添加 -c "shared_preload_libraries=''" 参数来覆盖默认的启动命令。

解析示例 Dockerfile

这个示例的 Dockerfile 首先使用 FROM 指令指定了基础镜像 postgres:latest,这个基础镜像提供了 PostgreSQL 数据库的运行环境。接下来,使用 COPY 指令将 init.sql 文件复制到容器的 /docker-entrypoint-initdb.d/ 目录中,这样在容器启动时 PostgreSQL 将自动运行该脚本文件来初始化数据库。最后,通过在 CMD 指令中添加 -c "shared_preload_libraries=''" 参数来覆盖默认的启动命令,这样就禁止了 Docker 运行 docker-entrypoint-initdb.d 目录中的 init 文件。

通过修改 Dockerfile 中的 CMD 指令,我们可以轻松地禁止 Docker 运行 docker-entrypoint-initdb.d 目录中的 init 文件。这为我们在使用 Docker 部署 PostgreSQL 数据库时提供了更大的灵活性和控制力。

希望本文对您有所帮助,谢谢阅读!

参考链接:[Docker PostgreSQL - Disable Running init Files in docker-entrypoint-initdb.d](PostgreSQL-disable-running-init-files-in-docker-entrypoint-initdb-d">https://stackoverflow.com/questions/50399775/docker-PostgreSQL-disable-running-init-files-in-docker-entrypoint-initdb-d)

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号