【问题标题】:502 Bad Gateway nginx docker502 错误网关 nginx docker
【发布时间】:2022-02-26 11:00:41
【问题描述】:

我在 Docker 中有 php、nginx、mysql、phpmyadmin,它们都在运行。 但是我不能使用任何其他的,因为当我访问本地主机时,它会显示以下错误:502 Bad Gateway

我不知道为什么,我尝试了很多知道原因,但我无法弄清楚。 那是我的Dockerfile

FROM php:8.0-fpm
          
RUN apt update   \
            && apt install -y zlib1g-dev g++ git libicu-dev zip libzip-dev zip \
            && docker-php-ext-install intl opcache pdo pdo_mysql \
            && pecl install apcu \
            && docker-php-ext-enable apcu \
            && docker-php-ext-configure zip \
            && docker-php-ext-install zip
WORKDIR /var/www/infoSystem
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN curl -sS https://get.symfony.com/cli/installer | bash
RUN mv /root/.symfony/bin/symfony /usr/local/bin/symfony
RUN git config --global user.email "test@gmail.com" \
        && git config --global user.name  "test"




FROM node:12.13.0
RUN apt update
WORKDIR /var/www/infoSystem
COPY entrypoint.sh /usr/local/bin/entrypoint
RUN ["chmod", "+x", "/usr/local/bin/entrypoint"]
ENTRYPOINT ["/usr/local/bin/entrypoint"]
USER node

entrypoint.sh文件

#!/bin/bash
# Prevent container from shutting down
while true; do sleep 3600; done

default.conf文件

server {

    listen 80;
    index index.php;
    server_name localhost;
    root /var/www/infoSystem/public;
    error_log /var/log/nginx/project_error.log;
    access_log /var/log/nginx/project_access.log;

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

    location ~ ^/index\\.php(/|$) {
        fastcgi_pass php:9000;
        fastcgi_split_path_info ^(.+\\.php)(/.*)$;
        include fastcgi_params;

        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;

        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;

        internal;
    }

    location ~ \\.php$ {
        return 404;
    }

}

docker-compose.yml文件

version: '3.3'

services:
  database:
    container_name: database
    image: mysql:8.0
    restart: always
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: alsbls
      MYSQL_DATABASE: infoSystem
      MYSQL_USER: alsbls
      MYSQL_PASSWORD: alsbls
    ports:
      - '4306:3306'
    volumes:
      - ./mysql:/var/lib/mysql

  php:
    container_name: php
    restart: always
    build:
      context: ./php
    ports:
      - '9000:9000'
    volumes:
      - ./app:/var/www/infoSystem

    depends_on:
      - database

  nginx:
    container_name: nginx
    image: nginx:stable-alpine
    restart: always
    ports:
      - '8080:80'
    volumes:
      - ./app:/var/www/infoSystem
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php
      - database

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    restart: always
    environment:
      PMA_HOST: database
      PMA_USER: alsbls_root
      PMA_PASSWORD: alsbls_root
    ports:
      - "8081:81"

  encore:
    container_name: node
    restart: always
    build:
      context: ./php
    volumes:
      - ./app:/var/www/infoSystem

【问题讨论】:

    标签: docker symfony nginx


    【解决方案1】:

    可能由于 php 容器未运行而发生错误。

    你能检查一下下面的 Dockerfile 吗?

    FROM php:8.0-fpm
          
    RUN apt update   \
                && apt install -y zlib1g-dev g++ git libicu-dev zip libzip-dev zip \
                && docker-php-ext-install intl opcache pdo pdo_mysql \
                && pecl install apcu \
                && docker-php-ext-enable apcu \
                && docker-php-ext-configure zip \
                && docker-php-ext-install zip
    WORKDIR /var/www/infoSystem
    RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
    RUN curl -sS https://get.symfony.com/cli/installer | bash
    RUN mv /root/.symfony/bin/symfony /usr/local/bin/symfony
    RUN git config --global user.email "devojob97@gmail.com" \
            && git config --global user.name  "alsbls"
    
    EXPOSE 9000
    
    CMD ["php-fpm"]
    

    添加php的代码后。

    您必须执行以下命令才能解决问题:

    docker run --rm -v $(pwd)/app:/var/www/infoSystem  -w /var/www/infoSystem -it node:12.13.0 bash
    

    这个答案来自@Artem

    【讨论】:

    • 那行得通,但我不能使用纱线。当我写yarn -v 时,它给了我找不到的命令。你能告诉我如何用 Docker 安装纱线吗?谢谢
    • 你能在单独的容器中使用纱线吗?
    • 如何将它与我的主 docker 容器连接起来?
    • 你只使用 yarn 来构建资产吗?如果是,您可以使用普通卷
    • 使用这个命令docker run --rm -v $(pwd)/app:/var/www/infoSystem -w /var/www/infoSystem -it node:12.13.0 bash你将立即运行并进入一个容器
    猜你喜欢
    • 2017-02-03
    • 2011-05-14
    • 2019-06-05
    • 2015-08-10
    • 2021-04-09
    • 1970-01-01
    • 2021-11-19
    • 2012-09-25
    • 2014-12-07
    相关资源
    最近更新 更多