【问题标题】:Docker - Call PHP script on web container from a CRON containerDocker - 从 CRON 容器调用 Web 容器上的 PHP 脚本
【发布时间】:2022-02-11 00:18:40
【问题描述】:

我有一个在 docker 容器(apache、php)中运行的 Web 应用程序。 我一直在寻找安装 cron 作业的解决方案,以便定期在我的网络应用程序上执行一些操作(执行 php 文件等)。

我找到了多个答案 (How to run a cron job inside a docker container?),所有答案都基于创建一个独立的容器,该容器将负责运行 cron 作业。

现在,如何让这个 cron 容器与我的 Web 容器通信?

我找到了多种解决方案:

  • 在我的 cron 容器上安装和使用 CURL
  • 在 Web 容器上安装 cron 并在后台运行(违反良好做法)
  • 我还想知道是否可以在我的 Web 和 cron 容器之间的撰写文件中使用共享网络,但我不确定如何使它工作。

你们有其他想法或代码示例来帮助我实现这一目标吗?

【问题讨论】:

  • Compose 为您提供网络,无需任何特殊设置;请参阅 Docker 文档中的 Networking in Compose。如果您的计划任务使用更高级别的语言,则使用其本机 HTTP 客户端,否则向管理端点发出 curl 请求是有意义的。

标签: php docker cron


【解决方案1】:

设法使用我的网络容器和我的 cron 容器之间的共享网络使其工作(感谢@David Maze)

Cron Dockerfile:

FROM ubuntu:18.04

RUN apt-get update
RUN apt-get install -y systemd
RUN apt-get install -y nano
RUN apt-get install -y cron
RUN apt-get install -y curl
 
RUN systemctl enable cron
RUN (crontab -l -u root; echo "* * * * * curl web:80 -d 'action=cron.run'") | crontab

# Create the log file to be able to run tail
RUN touch /var/log/cron.log

# Run the command on container startup
CMD cron && tail -f /var/log/cron.log

Docker 编写

version: '3.7'

services:

    # Web container
    web:
        # [...]
        ports:
            - "0001:80"
            - "0002:443"
        networks:
            - cron_network

    # Cron container
    cron:
        # [...]
        depends_on:
            - web
        networks:
          - cron_network

networks:
  cron_network:

【讨论】:

    猜你喜欢
    • 2017-02-21
    • 2021-09-06
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 2021-05-06
    相关资源
    最近更新 更多