【问题标题】:Laravel docker cron nginx 502 bad gateway issue (111: Connection refused) while connecting to upstream)Laravel docker cron nginx 502 bad gateway 问题(111:连接被拒绝)同时连接到上游)
【发布时间】:2020-10-26 08:25:30
【问题描述】:

我是 docker 容器中的 laravel 应用程序。一切正常,直到我向 dockerfile 添加了一个 cron。我需要安排一份工作,所以我需要一个 cron。 我的撰写文件看起来像这样

version: '3'

networks:
  laravel:
    driver: bridge

services:
  nginx:
    image: nginx:stable
    container_name: nginx
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php
      - mysql
    networks:
      - laravel

  php:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: php
    volumes:
      - ./src:/var/www/html
    ports:
      - "9000:9000"
    networks:
      - laravel

nginx 配置文件如下所示

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html/public;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

我的 docker 文件是这样的

FROM php:7.3-fpm

WORKDIR /var/www/html

# RUN docker-php-ext-install pdo pdo_mysql mysqli
# RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
RUN docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable mysqli

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

# Add crontab file in the cron directory
ADD src/app/schedule/crontab /etc/cron.d/cron

# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/cron

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

# Run the command on container startup
CMD printenv > /etc/environment && echo "cron starting..." && (cron) && : > /var/log/cron.log && tail -f /var/log/cron.log

而nginx日志中的错误是

2020/07/06 08:27:06 [error] 5#5: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.19.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://172.19.0.2:9000", host: "localhost:8080"

nginx 正在运行

/nginx - 172.19.0.7

这里出了什么问题?

【问题讨论】:

    标签: laravel docker nginx cron


    【解决方案1】:

    我终于找到了解决办法

    我们需要替换 docker 文件的最后一行。

    请使用这个

    CMD cron && docker-php-entrypoint php-fpm

    而不是

    CMD printenv > /etc/environment && echo "cron starting..." && (cron) && : > /var/log/cron.log && tail -f /var/log/cron.log

    【讨论】:

    • 非常感谢。我有同样的问题。当我尝试在 Dockerfile 末尾添加CMD /etc/init.d/cron start && tail -f /dev/null 时,Web 服务正常启动,但没有显示 Web。它显示“502 bad gateway”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 2017-10-18
    • 2016-10-06
    • 2014-02-26
    相关资源
    最近更新 更多