在 Dockerized Lemp 上部署 WordPress 时出现 502 Bad Gateway 错误?

Sol*_*osa 6 wordpress docker docker-compose

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

在此输入图像描述

其中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;'
Run Code Online (Sandbox Code Playgroud)

下面是显示 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;
 }
}
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

docker ps
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

command: docker-php-ext-install mysqli
Run Code Online (Sandbox Code Playgroud)

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

docker exec lem-fpm docker-php-ext-install mysqli
Run Code Online (Sandbox Code Playgroud)

&

docker-compose restart
Run Code Online (Sandbox Code Playgroud)

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

Mih*_*hai 2

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

#!/bin/bash

docker-php-ext-install mysqli

php-fpm
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)