扩展docker官方postgres图像

我试图扩展官方dockerpostgres图像,以便安装一个自定义的Python模块,所以我可以使用它从一个plpython3存储过程。

这是我的dockerfile

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? 还是他们从基础图像“inheritance”?

官方readme.md中的例子显示了一个Dockerfile,它只改变了语言环境,没有ENTRYPOINT或者CMD。

我也读了自述,我可以通过执行自定义sh和/或sql脚本来扩展图像。 我应该使用此function,而不是创build我的自定义图像? 在这种情况下的问题是我如何确保脚本只在“安装时”运行一次而不是每次都运行? 我的意思是,如果数据库已经被创build和填充,我不想覆盖它。

谢谢,Awer

如果你在你的Dockerfile中定义一个新的入口点,它将覆盖inheritance的入口点。 所以在这种情况下,Postgres将无法自动初始化(除非你写入相同的入口点)。

https://docs.docker.com/engine/reference/builder/#entrypoint

另外,官方的postgres映像可以让你在/docker-entrypoint-initdb.d文件夹中添加.sql / .sh文件,这样一旦数据库被初始化就可以执行。

最后,如果您不希望Postgres删除您的数据,则可以在每个docker run ...命令的/var/lib/postgresql/data文件夹和本地文件夹之间挂载一个卷以保存它们。