Docker - 扩展父级的ENTRYPOINT

时间:2017-09-26 17:44:12

标签: postgresql docker

我有一个基于官方postgres图像的自定义图像,我想扩展父图像的入口点,这样如果每次容器启动时它们都不存在就会创建新用户和数据库。可能吗?像我的图像将执行标准入口点的所有命令加上我自己的shell脚本。

我知道将自己的脚本放入/docker-entrypoint-initdb.d目录,但似乎只有在第一次创建卷时才执行它们。

2 个答案:

答案 0 :(得分:4)

您需要做的事情如下所示

<强> setup_user.sh

sleep 10
echo "execute commands to setup user"

<强> setup.sh

sh setup_user.sh &
./docker-entrypoint.sh postgres

您的图片应使用ENTRYPOINT

ENTRYPOINT ["/setup.sh"]

您需要在后台启动您的设置脚本,并让原始的entryscript完成其工作以启动数据库

答案 1 :(得分:0)

除了接受的答案Docker - extend the parent's ENTRYPOINT之外,你可能还想考虑执行你的脚本,而不是像postgres docker图像的'docker-entrypoint.sh'那样执行你的脚本( docker-entrypoint.sh;要初始化数据库,他们启动服务器,执行初始化命令,然后再次关闭它。因此:

<强> setup_user.sh

su - "$YOUR_PG_USER" -c '/usr/local/bin/pg_ctl -D /var/lib/postgresql/data -o "-c listen_addresses='localhost'" -w start'
psql -U "$YOUR_PG_USER" "$YOUR_PG_DATABASE" < "$YOUR_SQL_COMMANDS"
su - "$YOUR_PG_USER" -c '/usr/local/bin/pg_ctl -D /var/lib/postgresql/data -m fast -w stop'

<强> setup.sh

./setup_user.sh && ./docker-entrypoint.sh postgres