PHP-FPM 无法在 Docker 中启动:“shmget 失败:参数无效”

PHP-FPM 无法在 Docker 中启动:“shmget 失败:参数无效”

当我尝试在运行 CentOS 6.6 的 Docker 容器中启动 php-fpm56w 时出现以下错误:

[root@1b9ec42c577b conf]# service php-fpm start
Starting php-fpm: [24-Jul-2015 19:37:53] NOTICE: PHP message: PHP Fatal error:  PHP Startup: apc_shm_create: shmget(0, 67108864, 914) failed: Invalid argument. It is possible that the chosen SHM segment size is higher than the operation system allows. Linux has usually a default limit of 32MB per segment. in Unknown on line 0
[24-Jul-2015 19:37:53] NOTICE: PHP message: PHP Fatal error:  PHP Startup: apc_shm_attach: shmat failed: in Unknown on line 0
/bin/bash: line 1:   724 Segmentation fault      /usr/sbin/php-fpm --daemonize
                                                           [FAILED]

我怀疑这是共享内存问题。我尝试更改共享内存大小/etc/php.d/opcache.ini

; The OPcache shared memory storage size.
opcache.memory_consumption=64

改为 32 和 128,但问题仍未解决。我还将运行 CentOS 7 的主机 VM 中的内存从 1 GB 升级到了 2 GB。有什么想法吗?谢谢!

答案1

正如@Mary 链接的线程所建议的那样,--privileged在运行容器时使用标志(例如docker run -it --privileged --name -P b14 build8 bash)允许我更改容器内的 kernel.shmmax 设置,如下所示:(sysctl -w kernel.shmmax=268435456对于 256 mb 的共享内存)然后 php-fpm 就可以正常启动了。谢谢@Mary!

容器重新启动时共享内存大小会重置,所以我必须再次运行 kernel.shmmax 命令。

相关内容