我试图扩展官方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
答案 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 ...
命令中的本地文件夹之间安装卷以保留它们。