我有一个基于官方postgres图像的自定义图像,我想扩展父图像的入口点,这样如果每次容器启动时它们都不存在就会创建新用户和数据库。可能吗?像我的图像将执行标准入口点的所有命令加上我自己的shell脚本。
我知道将自己的脚本放入/docker-entrypoint-initdb.d目录,但似乎只有在第一次创建卷时才执行它们。
答案 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