扩展码头官员postgres图像

Awe*_*ler 6 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 /
Run Code Online (Sandbox Code Playgroud)

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

官方readme.md中的示例显示了Dockerfile,它只更改了语言环境,没有ENTRYPOINT或CMD.

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

谢谢,Awer

Jes*_*oco 6

如果在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 ...命令中的本地文件夹之间安装卷以保留它们.