【问题标题】:AEM 6.0 on docker - Dbus connection error泊坞窗上的 AEM 6.0 - Dbus 连接错误
【发布时间】:2018-04-03 21:49:02
【问题描述】:

我正在尝试对 AEM 6.0 安装进行 dockerize,这是我的作者的 Dockerfile。

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 - https://hub.docker.com/_/centos/

【问题讨论】:

  • Docker 镜像不运行 systemd,所以这行不通。您需要运行 supervisord 来启动多个进程或服务。
  • 我对 docker 不是很熟悉。但是,如果还提供 1) Docker 版本 2) CentOS 版本之类的信息,我会很好。
  • Docker 镜像可以运行 systemd,但这不是这里的问题。

标签: docker centos aem centos7 devops


【解决方案1】:

这里的问题是您试图在“构建”阶段启动aem 服务,使用以下语句:

RUN service aem6 start

这是有问题的,原因有很多。首先,您正在构建图像。在这个阶段启动服务是没有意义的......当构建过程完成时,什么都没有正在运行。图像只是文件的集合。在启动容器之前,您没有任何进程,此时您的 CMD 和 ENTRYPOINT 会影响正在运行的内容。

另一个问题是,在这个阶段,容器环境中没有其他任何东西在运行。在这种情况下,service 命令正在尝试使用dbus api 与systemd 通信,但这些服务都没有运行。

还有第三个稍微微妙的问题:您选择的解决方案依赖于标准 CentOS 进程管理器 systemd,并且就事情而言,您已经正确配置了事物(通过使用 @ 启用服务) 987654329@ 并在您的 CMD 语句中以 /sbin/init 开头)。然而,在容器中运行 systemd 可能会很棘手,尽管这是可能的。过去,systemd 要求容器使用--privileged 标志运行;我不确定这是否还有必要。

如果您没有在容器内运行多个进程(dnsmasq 和 aem),最简单的解决方案是直接启动 aem 服务,而不是依赖进程管理器。这会将您的 Dockerfile 减少为:

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

如果您确实需要 dnsmasq,您可以在第二个容器中运行它(可能与 aem 容器共享相同的网络环境)。

【讨论】:

  • 顺便说一句,我会把FROM centos:latest改写成FROM centos:7,否则如果CentOS 8出来了,你的软件不兼容的话,你就麻烦了。跨度>
猜你喜欢
  • 2015-10-08
  • 2018-02-07
  • 2016-05-24
  • 1970-01-01
  • 2017-10-12
  • 2018-12-20
  • 2019-06-28
  • 2021-11-05
  • 2016-10-20
相关资源
最近更新 更多