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) ]()