在 php-fpm docker 图像上更改为 pm = static

Change to pm = static on php-fpm docker image

我正在尝试在 PHP 的 fpm 配置中更改此值。

在这里,你可以看到我的简单docker-compose文件:

version: '3.6'
services:

  wordpress:
    image: wordpress:${WORDPRESS_VERSION:-php7.3-fpm}
    container_name: ${WORDPRESS_CONTAINER:-wordpress}
    volumes:
      - ./php/pool.d:/usr/local/etc/php-fpm.d
    environment:
      - WORDPRESS_DB_NAME=${WORDPRESS_DB_NAME:-wordpress}
      - WORDPRESS_TABLE_PREFIX=${WORDPRESS_TABLE_PREFIX:-wp_}
      - WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST:-mysql}
      - WORDPRESS_DB_USER=${WORDPRESS_DB_USER:-root}
      - WORDPRESS_DB_PASSWORD=${WORDPRESS_DB_PASSWORD:-password}
    depends_on:
      - mysql
    restart: always
...

里面./php/pool.d/my-www.conf我只有:

pm = static
pm.max_children = 10

我得到错误:

ERROR: [/usr/local/etc/php-fpm.d/my-www.conf:2] unknown entry 'pm'

如果我包含 www池命名空间:

[www]
pm = static
pm.max_children = 10

我得到错误:

ALERT: [pool www] user has not been defined

有什么想法吗?

实际上,当您将目录挂载到 docker-image 内部时(就像您所做的那样。/php/pool.d:/usr/local/etc/php-fpm.d)

version: '3.6'
services:

  wordpress:
    ...
    volumes:
      - ./php/pool.d:/usr/local/etc/php-fpm.d
    ...

你替换了它。因此,你没有池的配置,除了它的一小部分是这样的

pm = static
pm.max_children = 10

因此,您得到了错误。为了解决这个麻烦我可以提出两种方法:

  • 您可以将完整的池配置文件传递到 docker-image 内部,并在新配置文件中更改任何您想要的内容,然后从这个
  • 更改 docker-compose 文件
version: '3.6'
services:

  wordpress:
    ...
    volumes:
      - ./php/pool.d:/usr/local/etc/php-fpm.d
    ...

至此

version: '3.6'
services:

  wordpress:
    ...
    volumes:
      - ./php/pool.d/www.conf:/usr/local/etc/php-fpm.d/www.conf
    ...
  • 您可以通过将新配置值作为第二个配置文件传递到 docker-image 内部的池目录来覆盖池配置的一部分。但是,您必须关心文件名。例如,通常默认池配置文件的名称是 www.conf 因此,要覆盖其配置,您必须创建一个名称为 www2.conf 的文件以在 www.conf 文件之后加载(有关更多信息请参阅此问题:https://serverfault.com/a/806530/529531)。另外,您的 docker-compose 文件将是这样的
version: '3.6'
services:

  wordpress:
    ...
    volumes:
      - ./php/pool.d/www2.conf:/usr/local/etc/php-fpm.d/www2.conf
    ...