扩展Docker官方Postgres镜像

8
我将尝试扩展官方的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。
我还在读取readme中,可以通过执行自定义sh和/或sql脚本来扩展镜像。我应该使用此功能而不是创建自定义镜像吗?在这种情况下的问题是如何确保脚本仅在“安装时间”运行一次而不是每次运行?我的意思是,如果数据库已经创建并填充,则不希望覆盖它。
谢谢, Awer

在我看来,ENTRYPOINT 和 CMD 是继承的,但是由于你只能有一个这样的命令,只有最后一个命令才会生效,所以如果你添加一个,作为最后一个 CMD 或 ENTRYPOINT,它将被使用。 - user2915097
1个回答

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

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

此外,官方的Postgres镜像允许您在/docker-entrypoint-initdb.d文件夹中添加.sql/.sh文件,这样它们就可以在数据库初始化后执行。
最后,如果您不希望Postgres删除您的数据,您可以在每个docker run ...命令之间挂载一个卷,将/var/lib/postgresql/data文件夹与本地文件夹连接起来以保持数据持久化。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接