扩展码头官方postgres图像

时间:2016-02-10 15:18:11

标签: postgresql docker dockerfile

我试图扩展官方docker postgres图像以安装自定义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 /

我的问题是:我是否需要在我的Dockerfile中添加ENTRYPOINT和CMD命令?或者他们是继承的"从基础图像?

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

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

谢谢, AWER

1 个答案:

答案 0 :(得分:5)

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

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

此外,官方的postgres图像允许您在/docker-entrypoint-initdb.d文件夹中添加.sql / .sh文件,因此可以在初始化数据库后执行它们。

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