如何使用 NGINX、PHP-FPM 在 docker-compose.yml 文件中加载 mysqli 扩展

Posted

技术标签:

【中文标题】如何使用 NGINX、PHP-FPM 在 docker-compose.yml 文件中加载 mysqli 扩展【英文标题】:How to load mysqli extension inside docker-compose.yml file with NGINX, PHP-FPM 【发布时间】:2019-11-27 20:59:16 【问题描述】:

加载 docker-compose up 时,wordpress 在 url 上加载,但 mysqli_connect 函数未定义,因为没有扩展。

我尝试在fpm图片下添加以下内容

命令:“docker-php-ext-install mysqli”

我尝试将 Dockerfile 添加到包含

的 docker-compose.yml 文件的目录中
version: "3"

services:
  #database
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    networks:
      - wpsite
  # webserver
  nginx:
    image: nginx:latest
    ports:
      - "8080:80"
    links:
      - fpm
    volumes:
      - /Users/connergesbocker/Github/cbgesbocker/dotfiles/root/etc/nginx/conf.d/village.conf:/etc/nginx/conf.d/village.conf
      - /Users/connergesbocker/WordPress:/WordPress
    networks:
      - wpsite
  # phpmyadmin
  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin
    restart: always
    ports:
      - "8888:8888"
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: wordpress
    networks:
      - wpsite
  fpm:
    image: php:5.6.20-fpm
    ports:
      - "90:9000"
    # command: "docker-php-ext-install mysqli"
    links:
      - db
    volumes:
      - /Users/connergesbocker/WordPress:/WordPress
    working_dir: "/"
    networks:
      - wpsite
networks:
  wpsite:
volumes:
  db_data:```

【问题讨论】:

【参考方案1】:

您可以自定义您的 dockerfile 并在其中添加安装:

Dockerfile:

FROM php:5.6.20-fpm
RUN docker-php-ext-install mysqli

docker-compose.yaml 的一部分:

fpm:
  build: .
  image: myphp:1
  ports:
    - "90:9000"
  # command: "docker-php-ext-install mysqli"
  links:
    - db
  volumes:
    - /Users/connergesbocker/WordPress:/WordPress
  working_dir: "/"
  networks:
    - wpsite

【讨论】:

我必须稍微改变一下才能让它为我工作。我的docker-compose.yml 文件是version: '3',我做了:``` services: php: build: context: ./php ``` 相对于我的docker-compose.ymlDockerfile 位于./php/Dockerfile【参考方案2】:

您的覆盖将安装扩展,但容器将在安装后停止,因为 php-fpm 不会通过覆盖 CMD 启动。将命令替换为以下命令。

command:
  - /bin/sh
  - -c
  - |
      docker-php-ext-install mysqli 
      echo "extension installed.....starting php-fpm........................................"
      php-fpm

【讨论】:

这样做的缺点(相对于另一个答案单独的Dockerfile)是它似乎每次我docker-compose up时都会运行安装命令

以上是关于如何使用 NGINX、PHP-FPM 在 docker-compose.yml 文件中加载 mysqli 扩展的主要内容,如果未能解决你的问题,请参考以下文章

zabbix 如何监控php-fpm?

如何在CentOS 6上通过YUM安装Nginx和PHP-FPM

如何在CentOS 6上通过YUM安装Nginx和PHP-FPM

如何优化高流量站点的nginx和php-fpm的几个方面

如何在CentOS 6上通过YUM安装Nginx和PHP-FPM

如何在CentOS 6上通过YUM安装Nginx和PHP-FPM