启动命令仅在手动运行时才有效

启动命令仅在手动运行时才有效

安装 PHP FPM 时出现以下错误:

Creating config file /etc/php/7.0/fpm/php.ini with new version
invoke-rc.d: could not determine current runlevel
invoke-rc.d: policy-rc.d denied execution of start.

我尝试在dockerfile中进行以下调整:

RUN echo exit 0 > /usr/sbin/policy-rc.d
RUN /etc/init.d/php7.0-fpm start
RUN service php7.0-fpm start

这些都不起作用,并且 PHP FPM 在启动时无法运行。

但是如果我通过 ssh 登录并手动运行以下命令:

service php7.0-fpm start

然后它就开始工作了!这里有什么问题?

答案1

问题是您必须提供调用的实用程序的完整路径。当您从 ssh 会话执行此操作时,您会有一些PATH环境变量,其中包含查找给定实用程序的目录列表。而 docker 中没有这样的列表。

手动运行:

which service

您将获得实用程序的完整路径。将该路径提供给配置,而不是单个实用程序名称。

答案2

invoke-rc.d:policy-rc.d 拒绝执行启动。

尝试添加:

RUN printf "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d
RUN chmod +x /usr/sbin/policy-rc.d

看:如何解决“invoke-rc.d: policy-rc.d 拒绝执行启动。”


invoke-rc.d:无法确定当前运行级别

尝试:

RUN RUNLEVEL=1 dpkg --configure -a

或者:

RUN RUNLEVEL=1 dpkg-reconfigure php7.0-fpm

相关内容