2017-09-06 8 views
0

centos:systemd을 기반으로하는 고정 이미지를 만들려고합니다. 내 Dockerfile에서 내가 systemd 실행에 따라 명령을 실행하고,이 다음과 같은 오류와 함께 실패합니다docker는 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 실행받을 수 있나요?

설치 프로그램을 주석 처리하고 컨테이너를 실행하고 수동으로 설치 프로그램을 실행하면 올바르게 작동합니다. 당신의 설치 systemd 실행을 필요로하는 경우

가 여기에 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

이다, 난 당신이 수동으로 기본 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

수동으로 시작을 시도 할 때 동일한 D-Bus 오류 –

0

고정 표시기 용기 내부의 LAMP 스택은 systemd를 필요로하지 않는다 - 나는 docker-systemctl-replacement script와 함께 작동하도록 만든 . * .service 파일에 작성된 내용에 따라 서비스를 시작하고 중지 할 수 있습니다. ZendServer가 정상적으로 docker 컨테이너 외부에서 수행하는 작업으로이 작업을 시도 할 수 있습니다.