Docker docker-entrypoint-initdb.d按定义的顺序执行

时间:2020-03-29 14:48:07

标签: sql docker

我希望能够执行sql脚本文件,然后
脚本目录,然后是另一个脚本目录。
如果执行在docker-entrypoint-initdb.d下映射的内容,我该如何控制顺序

例如: 我有

run_me_first.sql
direcoty_first
   a.sql
   aa.sql
directory_second
   bb.sql

我喜欢能够执行:
首先:run_me_first.sql
第二:direcoty_first->内部脚本顺序无关紧要
第三:directory_second->内部脚本顺序无关紧要

使用docker-compose映射到docker-entrypoint-initdb.d,我如何控制脚本的执行顺序

1 个答案:

答案 0 :(得分:1)

它们应按字典顺序(按字母顺序排列)执行;如果您将它们命名为01-bb.sql02-a.sql03-aa.sql,那么将是排序。

首次启动容器时,postgres image entrypoint将脚本指定为在启动时运行

docker_process_init_files /docker-entrypoint-initdb.d/*

(其中docker_process_init_files是定义为earlier in the script的shell函数)。当外壳扩展此模式时,POSIX.1 shell specification表示

如果该模式与任何现有的文件名或路径名匹配,则该模式应替换为那些文件名和路径名,并根据当前语言环境中有效的整理顺序进行排序。如果此整理顺序未完全包含所有字符的顺序(请参阅XBD LC_COLLATE),则应使用POSIX语言环境的整理顺序逐字节逐字节比较所有相同整理的文件名或路径名。

另一面是,脚本必须直接位于/docker-entrypoint-initdb.d目录中,此特定的文件名扩展不会注意到子目录中的安装脚本。