Php 如何在docker compose构建的LEMP堆栈中插入停靠的cron进程?

Php 如何在docker compose构建的LEMP堆栈中插入停靠的cron进程?,php,nginx,docker,cron,docker-compose,Php,Nginx,Docker,Cron,Docker Compose,我有一个由docker compose文件构建的LEMP堆栈: cadvisor: image: google/cadvisor:latest container_name: lemp_cadvisor ports: - "8080:8080" volumes: - "/:/rootfs:ro" - "/var/run:/var/run:rw" - "/sys:/sys:ro" - "/var/lib/docker/:/var/lib/do

我有一个由docker compose文件构建的LEMP堆栈:

cadvisor:
  image: google/cadvisor:latest
  container_name: lemp_cadvisor
  ports:
    - "8080:8080"
  volumes:
    - "/:/rootfs:ro"
    - "/var/run:/var/run:rw"
    - "/sys:/sys:ro"
    - "/var/lib/docker/:/var/lib/docker:ro"
base:
  build: ./base
  container_name: lemp_base
  volumes:
    - /home/core/server-lemp/www/:/var/www/:rw
phpmyadmin:
  build: ./phpmyadmin
  container_name: lemp_phpmyadmin
  links:
    - base
  volumes:
    - /var/www/phpmyadmin
    - ./phpmyadmin/var/www/phpmyadmin/config.inc.php:/var/www/phpmyadmin/config.inc.php:rw
mariadb:
  build: ./mariadb
  container_name: lemp_mariadb
  environment:
    - MYSQL_ROOT_PASSWORD=pwd
  links:
    - base
  volumes:
    - /var/run/mysqld
    - /home/core/server-lemp/mariadb/:/var/lib/mysql/:rw
    - ./mariadb/etc/mysql/my.cnf:/etc/mysql/my.cnf:ro
ffmpeg:
  build: ./ffmpeg
  container_name: lemp_ffmpeg
  links:
    - base
  volumes:
    - /usr/ffmpeg
cron:
  build: ./cron
  container_name: lemp_cron
  links:
    - base
  volumes:
    - /etc/cron.weekly
    - /etc/cron.d
    - /etc/cron.hourly
    - /etc/cron.daily
    - /etc/cron.monthly
php:
  build: ./php
  container_name: lemp_php
  links:
    - base
  volumes:
    - /var/run/php-fpm
    - ./php/usr/local/php7/etc/php-fpm.conf:/usr/local/php7/etc/php-fpm.conf:ro
    - ./php/usr/local/php7/etc/php.ini:/usr/local/php7/etc/php.ini:ro
    - ./php/usr/local/php7/etc/php-fpm.d/www.conf:/usr/local/php7/etc/php-fpm.d/www.conf:ro
  volumes_from:
    - base
    - phpmyadmin
    - mariadb
    - ffmpeg
    - cron
nginx:
  build: ./nginx
  container_name: lemp_nginx
  links:
    - base
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - /var/cache/nginx
    - ./nginx/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
  volumes_from:
    - php
我的
/cron/Dockerfile
如下所示:

# Lanti/lempCron
#
# VERSION               1.0.0

FROM lemp_base:latest
MAINTAINER XY <info@domain.com>
LABEL Description="Cron" Vendor="XY" Version="1.0"

RUN apt-get -y update && apt-get -y dist-upgrade \
    && apt-get -y install \
        cron

RUN rm -rf /var/lib/apt/lists/*

CMD ["cron", "-f"]

我假设,由于造成这种情况的同一个错误,Nginx helper插件中的缓存清除选项也不起作用。

Wordpress可能正在您的“php”容器中运行,“wp cron”函数可能正在那里工作。虽然它是“cron-like”,但它实际上是Wordpress的一部分


您已经为“php”容器定义了no,因此似乎需要更新,以便wp contain可以访问正确主机上的端口80。

wp Cron实际上没有使用Cron,它是一个。如果您的web服务器正在侦听
0.0.0.0:80
(而且不仅是
127.0.0.1:80
?在nginx.conf中,如果我为服务器名称定义这些IP地址:
localhost
127.0.0.1
10.0.2.2
,错误消息始终保持不变。我是否应该尝试
0.0.0
?我将其更改为
0.0.0.0
。错误消息仍然出现。PHP正在与nginx c通信。)container通过套接字访问
/var/run/php fpm
,这是nginx容器的一个共享卷,支持fpm/FastCGI。在这种情况下,我也必须创建一个端口吗?因此,在php映像中放置cron并启动这两个进程(php,cron)可能是个好主意就我个人而言,我觉得这个解决方案过于复杂,要么跳过使用容器,要么使用所有系统上可用的更简单的
systemd nspawn
容器。特别是,有一个选项允许来宾操作系统与主机共享网络,从而节省了管理内部通信的时间ning networking,这是问题的根源。
systemd nspawn
仍然为您提供进程隔离和chroot'ed环境。感谢您的帮助和建议!看起来我已经解决了它。我将cron移动到php容器中,并使用supervisord启动了这两个进程。接下来,我从docker compose文件中删除了
链接(它将在将来被弃用,再加上不使用
host
cmd),我从
订购了带有
volumes\u的容器,并在docker compose文件中的每个容器上放置了这一行:
net:“host”
。通过这种方式,docker容器使用主机的网络,而不是桥接。我也遵循了由@thaJeztah链接的本教程:现在cron作业活跃起来了。但是有了这个新的堆栈,我遇到了一个新问题:完全删除
/var/www
上的Web服务器文件。有什么提示我可以知道怎么做吗?
There was a problem spawning a call to the WP-Cron system on your site.
This means WP-Cron events on your site may not work. The problem was:
Failed to connect to 127.0.0.1 port 80: Connection refused