docker构建如何使用centos运行中间容器:systemd

时间:2017-09-06 21:42:05

标签: docker zend-framework ibm-cloud dockerfile

我正在尝试构建基于centos:systemd的docker镜像。在我的Dockerfile中,我正在运行一个依赖于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

2 个答案:

答案 0 :(得分:0)

如果您的安装程序需要systemd运行,我认为您需要启动一个包含基本centos/systemd图像的容器,手动运行命令,然后使用api docs保存结果。在构建子图像时,基本图像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

答案 1 :(得分:0)

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