如何将cron与nginx服务一起运行?

wribegjk  于 2023-03-01  发布在  Nginx
关注(0)|答案(1)|浏览(181)

我创建了一个Docker映像来运行基于官方nginx映像的crontab。

FROM nginx

RUN apt-get update && apt-get -y install cron

CMD ["cron", "-f"]

如果我不设置最后一行CMD ["cron", "-f"],crontab服务作为容器运行后就无法启动,但如果我设置了它,nginx就无法启动。

docker build -t some-content-nginx .
docker run --name some-nginx -d -p 8080:80 some-content-nginx
(Nginx isn't running)

如何同时启动这两项服务?

vyswwuz2

vyswwuz21#

实现这一点的一种方法是将nginx映像的入口点文件封装到您自己的入口点中,该入口点的任务是启动cron服务,然后移交给标准的docker-nginx入口点。nginx映像使用/docker-entrypoint.sh入口点,因此我们只需要启动cron并将命令传递给该脚本,使用的入口点如下:

#!/bin/bash

cron && /docker-entrypoint.sh "$@"

下面是一个简单的Dockerfile,它创建必要的入口点并覆盖基础映像中的入口点:

FROM nginx

RUN apt-get update && \
    apt-get install -y \
        cron \
        && \
    echo '#!/bin/bash\n\ncron && /docker-entrypoint.sh "$@"' >> entrypoint-wrapper.sh && \
    chmod +x /entrypoint-wrapper.sh

ENTRYPOINT ["/entrypoint-wrapper.sh"]

# Have to reset CMD since it gets cleared when we set ENTRYPOINT
CMD ["nginx", "-g", "daemon off;"]

样品运行

$ docker run --name nginx-cron --detach nginx-cron
34301405f7b426022d9c286ff4e00f1c58570d76c5aba6b9f1c50ef698829976
$ docker exec nginx-cron service cron status
cron is running.
$ docker exec nginx-cron service nginx status
nginx is running.

相关问题