我试图安装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.
...
如何解决这个问题?如果这是一个问题。
3条答案
按热度按时间l5tcr1uw1#
Here是一个很好的职位,试图从根本上解决你所面临的问题。
近路:
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
。63lcw9qa2#
在Dockerfile中添加后为我工作:
运行回声“#!/bin/sh\nexit 0”> /usr/sbin/policy-rc.d
invoke-rc.d:无法确定当前运行级别
4zcjmb1e3#
在Ubuntu 23.04上工作,从上面@StackzOfZtuff和@Nikhil Kemp链接的博客文章开始,我使用了一对略有不同的方法。首先,我将这一行添加到我的
Dockerfile
中,这将消除could not determine current runlevel
消息。其次,我编辑了默认的
/usr/sbin/policy-rc.d
,以允许Apache重新加载,但不允许其他任何东西:顺便说一句,一个陷阱的粗心:文件第二行的注解似乎打破了它。我也不知道为什么,但千万别放进去。