2017-09-06 50 views
0

我想建立一个基于centos:systemd的码头图像。在我Dockerfile我正在运行依赖于systemd运行一个命令,这个失败,出现以下错误:码头建设如何运行与centos中间容器:systemd

Failed to get D-Bus connection: Operation not permitted 
error: %pre(mod-php-7.1-apache2-zend-server-7.1.7-16.x86_64) scriptlet failed, exit status 1 
Error in PREIN scriptlet in rpm package mod-php-7.1-apache2-zend-server-7.1.7-16.x86_64 

我怎样才能得到中间容器与--privileged和映射-v /sys/fs/cgroup:/sys/fs/cgroup:ro运行?

如果我注释掉安装程序,只运行容器并手动执行安装程序,它会正常工作。

这里是Dockerfile

FROM centos/systemd 
COPY ./ZendServer-9.1.0-RepositoryInstaller-linux.tar.gz /opt 
RUN tar -xvf /opt/ZendServer-9.1.0-RepositoryInstaller-linux.tar.gz -C /opt/ 
RUN /opt/ZendServer-RepositoryInstaller-linux/install_zs.sh 7.1 java --automatic 

回答

0

如果你的安装程序需要systemd运行,我想你会需要启动一个容器与基础centos/systemd图像,手动运行命令,然后保存使用docker commit结果。基本镜像ENTRYPOINTCMD不会在构建子图像时运行,但如果您启动容器并进行更改,它们会运行。在手动执行安装程序后,运行docker commit {my_intermediate_container} {my_image}:{my_version},用容器名称/散列,所需图像名称和映像版本替换花括号中的位。

在运行安装程序之前,您可能还可以更改Dockerfile以启动init。我不知道这是否会在这里工作在构建图像的背景下,但看起来像:

FROM centos/systemd 
COPY ./ZendServer-9.1.0-RepositoryInstaller-linux.tar.gz /opt 
RUN tar -xvf /opt/ZendServer-9.1.0-RepositoryInstaller-linux.tar.gz -C /opt/ \ 
    && /usr/sbin/init \ 
    && /opt/ZendServer-RepositoryInstaller-linux/install_zs.sh 7.1 java --automatic 
+0

谢谢@wmorrell现在会尝试,忘记手动提交,可能是一个很好的解决方法,直到我可以找出如何自动化它。 –

+0

尝试手动启动init时,出现同样的D-Bus错误 –

0

码头工人,容器内的LAMP堆栈不需要systemd - 我已经与docker-systemctl-replacement script工作。它可以根据* .service文件中的内容启动和停止服务。您可以尝试使用ZendServer通常在Docker容器之外进行的操作。

相关问题