跳转至

php容器无法加载ssh2模块


2016-08-09 by dongnan

环境

容器镜像: php-fpm 5.6.x
运行时: docker 1.10.3
宿主机: CentOS 6.7 amd64

问题描述

某个容器内 php-fpm 无法加载 ssh2 PHP扩展模块。

测试过程

以下命令在容器内执行:

前台运行php-fpm

/usr/local/php/sbin/php-fpm -c /work/var/php/php.ini -y /work/var/php/php-fpm.conf -F

未加载 ssh2 模块

php -m | grep -i 'ssh' 
# 返回空,未匹配模块名字。

后台运行php-fpm

/usr/local/php/sbin/php-fpm -c /work/var/php/php.ini -y /work/var/php/php-fpm.conf -D

已加载 ssh2 模块

php -m | grep -i 'ssh'
ssh2
# 返回ssh2 匹配模块名字。

问题原因不明

解决方法

php-fpm 运行在 docker 环境,并使用 supervisor 管理多个进程(nginx、php-fpm), 所以使用笨方法基于 Dockerfile重新定制一个镜像包含 ssh2 扩展,并在后台运行 php-fpm

帮助

示例中使用的参数:

-D, --daemonize  force to run in background, and ignore daemonize option from config file
-F, --nodaemonize force to stay in foreground, and ignore daemonize option from config file

其它参数

php-fpm --help
#...省略
  -c <path>|<file> Look for php.ini file in this directory
  -n               No php.ini file will be used
  -d foo[=bar]     Define INI entry foo with value 'bar'
  -e               Generate extended information for debugger/profiler
  -h               This help
  -i               PHP information
  -m               Show compiled in modules
  -v               Version number
  -p, --prefix <dir>
                   Specify alternative prefix path to FastCGI process manager (default: /usr/local/php).
  -g, --pid <file>
                   Specify the PID file location.
  -y, --fpm-config <file>
                   Specify alternative path to FastCGI process manager config file.
  -t, --test       Test FPM configuration and exit
  -O, --force-stderr
                   force output to stderr in nodaemonize even if stderr is not a TTY
  -R, --allow-to-run-as-root
                   Allow pool to run as root (disabled by default) ]()

欢迎关注微信公众号: 运维录

Back to top