Docker:如何在数据库映像中保留入口点

时间:2018-06-06 11:08:38

标签: docker

我有一个名为base-image-A

的基本图片
FROM postgres
ADD /scripts /docker-entrypoint-initdb.d

脚本中有一个脚本:custom.sql 我构建了图像并执行了它。它有效。

现在我创建了一个源自base-image-A的图像:

FROM base-image-A
ADD ./different-scripts/ /docker-entrypoint-initdb.d

这项工作也很好。执行原始脚本和新脚本。 但是当我尝试挂载

时就会出现问题
docker run -d ... -v ./different-scripts/ /docker-entrypoint-initdb.d/ base-image-A

现在只执行新脚本而不是base-image-a(custom.sql)中的原始脚本。它可能被mount覆盖了。有没有办法让这个工作并坚持脚本?

2 个答案:

答案 0 :(得分:0)

根据@ sp0gg注释,解决方案是将SELECT * FROM B INNER JOIN AB ON AB.id = B.ab_id AND AB.date IS NULL 挂载到不同的目录(比如different-scripts),并将该目录中的脚本链接到scripts。如下所示:

/docker-entrypoint-initdb.d

它应该在容器初始化之前链接你的文件。

答案 1 :(得分:0)

问题在于您通过在其上安装新脚本目录来隐藏原始脚本,并使用:

-v ./different-scripts/:/docker-entrypoint-initdb.d/

正如@ sp0gg所说,你可以试试这个(我还没有测试过):

-v ./different-scripts:/docker-entrypoint-initdb.d/different-scripts/

不同之处在于,它将新目录安装在旧目录下,而不是在其顶部。但是,{@ 1}}变体现在更受欢迎,正如@ b0gsub的回答中所使用的那样。