脚本执行后Docker退出

时间:2019-01-30 11:29:38

标签: bash docker nginx

我有以命令开头的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?

1 个答案:

答案 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 "$@";

+ info about reason and solution to use the exec line