在Dockerized Lemp上部署WordPress时遇到502 Bad Gateway错误?

时间:2019-05-06 06:46:57

标签: wordpress docker docker-compose

项目目录中的tree命令输出显示以下布局。

enter image description here

其中的代码文件夹包含标准的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错误的网关错误。

enter image description here

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

docker ps

enter image description here

好吧,问题似乎出在phpfpm服务部分的Coommand步骤上。

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使它工作只有吗?

2 个答案:

答案 0 :(得分:2)

创建一个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

答案 1 :(得分:0)

您应该将“ ./code”映射为“ / var / www / code”之类的内容,而不是“ / code”。然后在site.conf中更改根目录:“ root / var / www / code”。

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

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