【问题标题】:Getting 502 Bad Gateway Error While Deploying WordPress On Dockerized Lemp?在 Dockerized Lemp 上部署 WordPress 时出现 502 Bad Gateway 错误?
【发布时间】:2019-05-06 06:46:56
【问题描述】:

我的项目目录上的树命令输出显示以下布局。

其中code文件夹包含标准wordpress文件,db文件夹是将容器sql数据映射到宿主目录。

docker-compose.yml 的内容如下所示:

mariadb:
 container_name: lemp-mariadb
 image: mariadb
 environment:
  - MYSQL_ROOT_PASSWORD=root.maria
  - MYSQL_DATABASE=wordpress
  - MYSQL_USER=wordpress
  - MYSQL_PASSWORD=wordpress
 volumes:
  - ./db:/var/lib/mysql
phpfpm:
 container_name: lemp-fpm
 image: php:7-fpm
 volumes:
  - ./code:/code
 environment:
  WORDPRESS_DB_HOST: mariadb
  WORDPRESS_DB_USER: wordpress
  WORDPRESS_DB_PASSWORD: wordpress
  WORDPRESS_DB_NAME: wordpress
 links:
  - mariadb
 command: docker-php-ext-install mysqli
nginx:
 container_name: lemp-nginx
 image: nginx:latest
 ports:
  - "8080:80"
 volumes:
  - ./code:/code
  - ./site.conf:/etc/nginx/conf.d/default.conf
 links:
  - phpfpm
 command: nginx -g 'daemon off;'

下面是显示 nginx 配置的 site.conf 文件。

server {
 listen 80;
 root /code;
 index index.php index.html index.htm;

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

 location ~ \.php$ {
     try_files $uri =404;
     include fastcgi_params;
     fastcgi_pass phpfpm:9000;
     fastcgi_index index.php;
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 }
}

当我运行 docker-compose up -d 并点击 http://localhost:8080 时,它显示 502 bad gateway error。

为什么它不起作用?我希望它显示 wordpress 安装页面。

docker ps

好吧,看来问题出在 phpfpm 服务部分的命令步骤上。

command: docker-php-ext-install mysqli

如果我在 docker-compose 文件中注释此行并运行它,容器也会出现并连接,但我必须通过此命令将其手动安装在 fpm 节点上

docker exec lem-fpm docker-php-ext-install mysqli

&

docker-compose restart

我得到 wp-installation 页面,但这不方便,扼杀了自动化和容器化的全部目的,我希望这个过程是自动化的,所以请告诉我是否有办法通过 docker-compose 让它工作只有??

【问题讨论】:

    标签: wordpress docker docker-compose


    【解决方案1】:

    创建一个 shell 脚本 (start.sh),将其放在 docker-compose.yml 旁边并使其可执行:

    #!/bin/bash
    
    docker-php-ext-install mysqli
    
    php-fpm
    

    将其映射到您的服务中并更改命令:

    phpfpm:
     container_name: lemp-fpm
     image: php:7-fpm
     volumes:
      - ./code:/code
      - ./start.sh:/usr/local/bin/start.sh
     environment:
      WORDPRESS_DB_HOST: mariadb
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
     links:
      - mariadb
     command: /usr/local/bin/start.sh
    

    【讨论】:

    • fpm 节点仍以 0 代码退出。为什么会这样?为什么它不能继续运行??
    • 对此感到抱歉。我编辑了我的答案。这是 start.sh 脚本中的错误命令
    • ty amigo,现在听起来很有趣,我收到数据库连接错误,我能够连接到 mariadb,当我运行 show databases 时;命令,它只显示信息架构,没有 wordpress 数据库。
    • 您为数据库声明了一个卷:“volumes: - ./db:/var/lib/mysql” 确保在开始之前删除该文件夹(或者至少它是空的)否则数据库将无法正确初始化。但更重要的是,我没有在您的设置中看到谁应该创建 WP 表
    • 我不明白,我会在每次启动 docker-compose 时清理该文件夹。而且我完全没有得到“谁应该创建 Wp 表”部分。请问我可以知道一些细节吗?
    【解决方案2】:

    您应该将“./code”映射到“/var/www/code”之类的东西,而不是“/code”。然后在site.conf中更改root:“root /var/www/code”。

    我从您的上一个打印屏幕中看到您被重定向到 /code 并且不应该发生这种情况。您的其余配置看起来不错。

    您也可以在官方页面上看到一个很好的参考:https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/

    【讨论】:

    • 我仍然收到 502 bad gateway 错误,我猜可能是因为 fpm 节点。也许它无法连接。
    • 您可以使用以下命令进行检查:“docker exec -ti phpfpm bash”并尝试 curl localhost:9000(之前可能需要安装 curl)
    • 它说连接到本地主机端口 9000 失败:连接被拒绝。我想我必须明确打开端口或其他什么?我不知道去哪里
    • 别担心,我知道 :) 你能做一个“docker ps”并发布结果吗?
    • 我现在在问题的末尾添加了它的输出作为图像。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2013-07-16
    • 2021-05-31
    • 2021-03-31
    相关资源
    最近更新 更多