Postgresql 扩展docker官方博士后形象

Postgresql 扩展docker官方博士后形象,postgresql,docker,dockerfile,Postgresql,Docker,Dockerfile,我正试图扩展docker postgres的官方镜像,以便安装一个自定义python模块,这样我就可以在plpython3存储过程中使用它 这是我的文件 FROM postgres:9.5 RUN apt-get update && apt-get install -y postgresql-plpython3-9.5 python3 ADD ./repsug/ /opt/smtnel/repsug/ WORKDIR /opt/smtnel/repsug/ RUN ["pytho

我正试图扩展docker postgres的官方镜像,以便安装一个自定义python模块,这样我就可以在plpython3存储过程中使用它

这是我的文件

FROM postgres:9.5
RUN apt-get update && apt-get install -y postgresql-plpython3-9.5 python3
ADD ./repsug/ /opt/smtnel/repsug/
WORKDIR /opt/smtnel/repsug/
RUN ["python3", "setup.py", "install"]
WORKDIR /
我的问题是:是否需要将ENTRYPOINT和CMD命令添加到Dockerfile?或者它们是从基础映像“继承”来的

官方readme.md中的示例显示了一个Dockerfile,它只更改区域设置,没有ENTRYPOINT或CMD

我还在自述文件中读到,我可以通过执行自定义sh和/或sql脚本来扩展映像。我应该使用此功能而不是创建自定义图像吗?本例中的问题是如何确保脚本在“安装时”只运行一次,而不是每次都运行?我的意思是,如果已经创建并填充了数据库,我就不想覆盖它

谢谢,
Awer

如果在Dockerfile中定义新入口点,它将覆盖继承的入口点。因此,在这种情况下,Postgres将无法自动初始化(除非您编写相同的入口点)

另外,官方postgres映像允许您在
/docker entrypoint initdb.d
文件夹中添加.sql/.sh文件,以便在初始化数据库后执行这些文件


最后,如果您不希望Postgres删除您的数据,您可以在
/var/lib/postgresql/data
文件夹和每个
docker run…
命令中的本地文件夹之间装载一个卷来持久化它们

在我看来,ENTRYPOINT和CMD是继承的,但是因为您只能有一个这样的命令,所以只有最后一个命令是有效的,所以如果您添加一个命令,因为它将是最后一个CMD或ENTRYPOINT,它将被使用