2017-10-23 1 views
0

AEM 6.0 설치를 도킹하려고하는데 이는 작성자를위한 Dockerfile입니다.AEM 6.0 for docker - Dbus 연결 오류

from centos:latest 

COPY aem6.0-author-p4502.jar /AEM/aem/author/aem6.0-author-p4502.jar 
COPY license.properties /AEM/aem/author/license.properties 

RUN yum install dnsmasq -y 
RUN systemctl enable dnsmasq 
RUN yum install initscripts -y 
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \ 
rm -f /lib/systemd/system/multi-user.target.wants/*;\ 
rm -f /etc/systemd/system/*.wants/*;\ 
rm -f /lib/systemd/system/local-fs.target.wants/*; \ 
rm -f /lib/systemd/system/sockets.target.wants/*udev*;\ 
rm -f /lib/systemd/system/sockets.target.wants/*initctl*;\ 
rm -f /lib/systemd/system/basic.target.wants/*;\ 
rm -f /lib/systemd/system/anaconda.target.wants/*; 

WORKDIR /AEM/aem/author 
RUN yum install wget -y 
RUN wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.rpm" 
RUN yum localinstall jdk-8u151-linux-x64.rpm -y 
RUN java -XX:MaxPermSize=256m -Xmx512M -jar aem6.0-author-p4502.jar -unpack 

COPY aem6 /etc/init.d/aem6 
RUN chkconfig --add aem6 
RUN yum -y install initscripts && yum update -y & yum clean all 

RUN chown -R $USER:$(id -G) /etc/init.d 
RUN chmod 777 -R /etc/init.d/aem6 
RUN systemctl enable aem6.service 
RUN service aem6 start 
VOLUME /sys/fs/cgroup 
CMD /usr/sbin/init 

서비스 시작시 오류 - failed to get Dbus connection error과 함께 빌드가 실패합니다. 나는 그것을 고치는 방법을 알아낼 수 없었다.

나는 해봤이 - https://github.com/CentOS/sig-cloud-instance-images/issues/45 - 여기

+0

도커 이미지는 systemd를 실행하지 않으므로 작동하지 않습니다. 여러 프로세스 나 서비스를 시작하려면 supervisord를 실행해야합니다. –

+0

나는 도커에 익숙하지 않다. 하지만 1) Docker Version 2) CentOS 버전과 같은 정보도 제공되면 좋을 것입니다. – phemanthkumar28

+0

도커 이미지 *는 systemd를 실행할 수 있지만 여기에는 문제가 없습니다. – larsks

답변

0

, 문제는이 성명에서 "구축"단계에서 aem 서비스를 시작하기 위해 노력하고 있다는 점이다 https://hub.docker.com/_/centos/ :

RUN service aem6 start 

이것은 여러 가지 이유로 문제가됩니다. 첫째로, 당신은 이미지를 만들고 있습니다. 이 단계에서 서비스를 시작하는 것은 의미가 없습니다 ... 빌드 프로세스가 완료되면 은 아무것도 표시되지 않습니다.이 실행 중입니다. 이미지는 파일의 모음 일뿐입니다. 컨테이너를 부팅 할 때까지 프로세스이 없습니다.이 시점에서 CMDENTRYPOINT은 실행중인 항목에 영향을줍니다.

또 다른 문제는이 단계에서 컨테이너 환경 내에서 실행되고있는 것이 하나도 없다는 것입니다. 이 경우 service 명령은 dbus api를 사용하여 systemd과 통신하려고 시도하지만 해당 서비스가 실행되고 있지 않습니다.

세 번째로 약간 더 미묘한 문제가 있습니다. 선택한 해결책은 systemd 표준 CentOS 프로세스 관리자에 의존하며 올바르게 구성한 것입니다 (systemctl enable ...CMD 성명에 /sbin/init을 시작하십시오.) 그러나 컨테이너에서 systemd를 실행하는 것은 가능하지만 까다로울 수 있습니다. 과거에는 systemd 컨테이너가 --privileged 플래그로 실행해야했습니다. 이것이 더 이상 필요한지 확실하지 않습니다.

컨테이너 내에 여러 프로세스 (dnsmasq 및 aem)를 실행하지 않은 경우 가장 간단한 해결책은 프로세스 관리자를 사용하는 대신 aem 서비스를 직접 시작하는 것입니다. 당신이 실제로하는 dnsmasq이 필요한 경우 두 번째 컨테이너 (잠재적으로 AEM 컨테이너와 동일한 네트워크 환경을 공유)에서 실행할 수

FROM centos:latest 

COPY aem6.0-author-p4502.jar /AEM/aem/author/aem6.0-author-p4502.jar 
COPY license.properties /AEM/aem/author/license.properties 

WORKDIR /AEM/aem/author 
RUN yum install wget -y 
RUN wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.rpm" 
RUN yum localinstall jdk-8u151-linux-x64.rpm -y 
RUN java -XX:MaxPermSize=256m -Xmx512M -jar aem6.0-author-p4502.jar -unpack 

CMD some commandline to start aem 

:이처럼 뭔가에 Dockerfile을 감소시킬 것이다.

+1

덧붙여서, 나는'FROM centos : latest'를'FROM centos : 7'로 다시 쓰겠습니다. 그렇지 않으면 CentOS 8이 나오고 당신의 소프트웨어와 호환되지 않는다면 나중에 문제를 일으킬 것입니다. – larsks