laravel - 502错误的网关Docker + Laravel

标签 laravel docker nginx

我已经开始学习Docker。我有Laravel应用程序,想在Docker容器中启动它。但是我无法正确运行它。

我有这个docker-compose.yml:

version: '2'
services:

  # The Application
  app:
    build:
      context: ./
      dockerfile: app.dockerfile
    working_dir: /var/www
    volumes:
      - ./:/var/www
    environment:
      - "DB_PORT=3306"
      - "DB_HOST=database"

  # The Web Server
  web:
    build:
      context: ./
      dockerfile: web.dockerfile
    working_dir: /var/www
    volumes_from:
      - app
    ports:
      - 8080:80

  # The Database
  database:
    image: mysql:5.6
    volumes:
      - dbdata:/var/lib/mysql
    environment:
      - "MYSQL_DATABASE=homestead"
      - "MYSQL_USER=homestead"
      - "MYSQL_PASSWORD=secret"
      - "MYSQL_ROOT_PASSWORD=secret"
    ports:
        - "33061:3306"

volumes:
  dbdata:

而这个vhost.conf:
server {
    listen 80;
    index index.php index.html;
    root /var/www/public;

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

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

app.dockerfile:
FROM php:7.1.3-fpm

RUN apt-get update && apt-get install -y \
    libmagickwand-dev --no-install-recommends \
    libmcrypt-dev \
    cron \
    mysql-client \
    vim \
    && docker-php-ext-install mcrypt pdo_mysql

web.dockerfile:
FROM nginx:1.10

ADD vhost.conf /etc/nginx/conf.d/default.conf

运行容器后,我有502 Bad Gateway,在网络容器中,我有这个:
connect() failed (111: Connections refused) while connecting to upstream, client: 192.168.99.1, server: request "GET /HTTP/1.1", upstream: "fastcgi://172.19.0.3:9000", host: "192.168.99.101:8080"

我对服务器设置很不好,也不了解发生了什么。将非常感谢您的帮助。

最佳答案

这可能是由于php在localhost上侦听引起的,并且不接受外部连接。您应该更新php.ini以收听0.0.0.0。

您可以通过在应用容器上运行以下命令来进行测试。并尝试从Web容器远程登录到应用容器。

/usr/bin/php -S 0.0.0.0:9000

telnet app 9000

如果由于某种原因该命令失败,请尝试编辑您的php-fpm配置以将侦听地址设置为0.0.0.0:9000
例:
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.

listen = 0.0.0.0:9000

关于laravel - 502错误的网关Docker + Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53203294/

相关文章:

php - Laravel hasOne 关系在 dd 上返回 null

php - 在 Laravel 4.2 中更改密码

php - 在 Laravel 中保存一对一关系

docker - 外部访问 kubernetes

ubuntu - 子域 + nginx + 反向代理 + jenkins + gitlab

nginx - 为什么要使用带有反向代理的 gunicorn?

php - Laravel 多个多对多关系?

python - 用于服务多个 Django 应用程序 docker 容器的 nginx 反向代理配置问题

NAT 后面的 Docker swarm worker

nginx - 如果删除了日志文件,则uWSGI日志记录将无法正常工作