我有以命令开头的docker容器:
"CMD [\"/bin/bash\", \"/usr/bin/gen_new_key.sh\"]"
脚本如下:
#!/bin/bash
/usr/bin/generate_signing_key -k xxxx -r eu-west-2 > /usr/local/nginx/s3_signature_key.txt
{ read -r val1
read -r val2
sed -i "s!AWS_SIGNING_KEY!'$val1'!;
s!AWS_KEY_SCOPE!'$val2'!;
" /etc/nginx/nginx.conf
} < /usr/local/nginx/s3_signature_key.txt
if [ -z "$(pgrep nginx)" ]
then
nginx -c /etc/nginx/nginx.conf
else
nginx -s reload
fi
脚本本身正在运行,因为我可以在/ var / lib / docker中看到docker层中的所有数据。 计划每5天由cron运行一次,因为第一行生成的AWS签名密钥仅在7天有效。如何防止在脚本完成并保持运行后退出Docker?
答案 0 :(得分:0)
您想要一个始终通过nginx启用的容器,并每5天运行一次该脚本。
首先,您可以使用以下命令运行nginx:
CMD ["nginx", "-g", "daemon off;"]
这样,在nginx运行时,容器始终处于打开状态。
然后,只需使用cron将脚本作为普通脚本运行即可:
chmod +x script.sh
0 0 */5 * * script.sh
编辑:因为脚本必须在第一次运行中
1)一个解决方案(漂亮的解决方案),它是第一次手动加载AWS有效签名密钥。第一次之后,脚本将自动更新AWS有效签名密钥。 (使用先前提供的解决方案)
2)另一个解决方案是运行docker entrypoint文件(这是您的脚本)
# Your script
COPY docker-entrypoint.sh /usr/local/bin/
RUN ["chmod", "+x", "/usr/local/bin/docker-entrypoint.sh"]
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
# Define default command.
CMD ["/bin/bash"]
在您的脚本上:
service nginx start
echo "Nginx is running."
#This line will prevent the container from turning off
exec "$@";