如何解决“invoke-rc.d”:policy-rc.d denied execution of start.”当构建容器Ubuntu 14.04并安装apache 2时?

dwthyt8l  于 2023-10-23  发布在  Apache
关注(0)|答案(3)|浏览(455)

我试图安装apache2后,建筑形象的过程。这是我在Dockerfile中使用的代码。

FROM ubuntu:14.04
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections

ENV DEBIAN_FRONTEND noninteractive

RUN sudo apt-get update
RUN sudo apt-get install -y apache2

在这个过程之后,我安装了Apache,但我得到了以下错误(终端中显示红色)

...
invoke-rc.d: policy-rc.d denied execution of start.
...

如何解决这个问题?如果这是一个问题。

l5tcr1uw

l5tcr1uw1#

Here是一个很好的职位,试图从根本上解决你所面临的问题。

近路

  1. RUN printf '#!/bin/sh\nexit 0' > /usr/sbin/policy-rc.d应该解决您的问题,或者
    1.如果这不能解决问题,请尝试使用privileged选项运行Docker容器。像这样,docker run --privileged -d -ti DOCKER_IMAGE:TAG
    理想情况下,我不建议运行带有privileged选项的容器,除非它是一个测试床容器。运行具有特权的Docker容器的原因是为容器提供了所有功能,并且还取消了所有强制执行的限制。换句话说,容器几乎可以做主机可以做的所有事情。但这不是一个好的做法。这违背了Docker与主机隔离的目的。
    理想的方法是根据你想要实现的目标对你的docker容器进行set capabilities。在谷歌上搜索一下,应该可以帮助你为你的Docker容器提供合适的capability
63lcw9qa

63lcw9qa2#

在Dockerfile中添加后为我工作:
运行回声“#!/bin/sh\nexit 0”> /usr/sbin/policy-rc.d
invoke-rc.d:无法确定当前运行级别

  • 正在启动NTP服务器ntpd.完成。
4zcjmb1e

4zcjmb1e3#

在Ubuntu 23.04上工作,从上面@StackzOfZtuff和@Nikhil Kemp链接的博客文章开始,我使用了一对略有不同的方法。首先,我将这一行添加到我的Dockerfile中,这将消除could not determine current runlevel消息。

ENV RUNLEVEL 1

其次,我编辑了默认的/usr/sbin/policy-rc.d,以允许Apache重新加载,但不允许其他任何东西:

#!/bin/sh
if [ "$1" = "apache2" ]
then
    exit 0
fi
exit 101

顺便说一句,一个陷阱的粗心:文件第二行的注解似乎打破了它。我也不知道为什么,但千万别放进去。

相关问题