gpt4 book ai didi

docker-compose - 如何让 crond 在 Docker 容器中自动启动 Alpine?

转载 作者:行者123 更新时间:2023-12-05 03:54:22 27 4
gpt4 key购买 nike

我希望能够使用 cron 在一个小时内在容器服务中运行一个简单的 bash 脚本。我通过 docker-compose 使用 Alpine Linux 和自定义 Dockerfile 来生成基于 php-fpm 的图像,我希望在其上运行 crond - 除了我不能。

执行 ps aux |容器上的 grep cron 构建后,不返回任何内容。

据我所知,Docker 容器中不存在通常的 Linux 启动进程 - 很好 - 那么如何自动启动 crond?它在 /etc/periodic/ 下的目录是自动创建的,所以我不明白为什么使用这些目录的适用进程也没有运行。

我尝试在 docker-compose.yml 中创建一个专用服务定义,它确实有效,但每小时运行的 shell 脚本需要访问以 不同方式运行的 php 二进制文件 容器,所以这不是一个可行的解决方案。

如果我进入容器并运行 rc-service crond start 我得到这个 - 但它永远不会“完成”:

/var/www/html # rc-service crond start
* WARNING: crond is already starting
#> docker --version
Docker version 19.03.8, build afacb8b7f0
#> docker-compose --version
docker-compose version 1.23.2, build 1110ad01

我需要一个可以放入我的 Dockerfiledocker-compose.yml 文件中的解决方案。

Dockerd 在 Ubuntu Xenial FWIW 上运行。

最佳答案

要运行一个cronjob容器(Alpine),你需要确保你的docker容器的命令是

exec crond -f

如果你想把它添加到一个 docker 文件中

CMD ["exec", "crond", "-f"]

在运行上述命令之前,您可能还需要更新 Jade 米文件

基于docker文件更新并编写

为了能够解决您的问题,您需要更新您的 docker-compose 以拥有两个容器,一个用于 cron,一个用于 web

 service_php_cron:
build:
context: .
dockerfile: .docker/services/php/Dockerfile.dev
container_name: base_service_php
command: 'cron_jobs'
volumes:
- ./app:/var/www/html/public
env_file:
- ./.env
# Low level container logging
logging:
driver: "json-file"
options:
max-size: "1m"
max-file: "5"

service_php:
build:
context: .
dockerfile: .docker/services/php/Dockerfile.dev
ports:
- "9000:9000"
command: 'web_server'
container_name: base_service_php
volumes:
- ./app:/var/www/html/public
env_file:
- ./.env
# Low level container logging
logging:
driver: "json-file"
options:
max-size: "1m"
max-file: "5"

您还需要更新您的 docker 文件,以便能够使用 docker 入口点处理多个命令

将以下行添加到您的 docker 文件中 + 删除 CMD

COPY ./docker-entrypoint.sh /
RUN chmod a+x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]

最后,创建入口点(确保它散列执行权限)

#!/bin/sh -e

case $1 in

web_server)
YOUR WEB SERVER COMMAND
;;

cron_jobs)
exec crond -f
;;

*)
exec "$@"
;;

esac

exit 0

您可以查看此链接以获取有关 entrypoints 的更多信息

关于docker-compose - 如何让 crond 在 Docker 容器中自动启动 Alpine?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61056846/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com