0

我在 Ubuntu 上测试了我的 ApachedMQ 映像,它在 Docker 上运行良好。在 Openshift 上部署相同的映像不起作用。它应该像 Ubuntu 一样开箱即用,但它总是抱怨 pod 中缺少目录,或者 pod 中的目录缺少权限。您将在下面看到有关前者的错误。

我正在使用免费版的 Openshift online v3.x 我只使用控制台从映像进行部署。下面只是 pod 为部署而加速时的日志消息示例。

java.io.FileNotFoundException: /opt/activemq/data/activemq.log (Permission denied)
Caused by: java.io.IOException: Failed to create directory '/opt/activemq/data/kahadb'

任何帮助将不胜感激,因为这个图像应该 IMO,可以从控制台部署,而不需要任何 YAML 和 oc CLI。一些日志跟踪信息: INFO: Loading '/opt/activemq/bin/env' INFO: Using java '/docker-java-home/jre/bin/java' INFO: Starting in foreground, this is just for debugging purposes (stop process by pressing CTRL+C) INFO: Creating pidfile /opt/activemq/data/activemq.pid bin/activemq: 484: bin/activemq: cannot create /opt/activemq/data/activemq.pid: Permission denied Java Runtime: Oracle Corporation 1.8.0_141 /usr/lib/jvm/java-8-openjdk-amd64/jre Heap sizes: current=62976k free=58714k max=932352k JVM args: -Xms64M -Xmx1G -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=/opt/activemq/conf/login.config -Dcom.sun.management.jmxremote -Djava.awt.headless=true -Djava.io.tmpdir=/opt/activemq/tmp -Dactivemq.classpath=/opt/activemq/conf:/opt/activemq/../lib/: -Dactivemq.home=/opt/activemq -Dactivemq.base=/opt/activemq -Dactivemq.conf=/opt/activemq/conf -Dactivemq.data=/opt/activemq/data Extensions classpath: [/opt/activemq/lib,/opt/activemq/lib/camel,/opt/activemq/lib/optional,/opt/activemq/lib/web,/opt/activemq/lib/extra] ACTIVEMQ_HOME: /opt/activemq ACTIVEMQ_BASE: /opt/activemq ACTIVEMQ_CONF: /opt/activemq/conf ACTIVEMQ_DATA: /opt/activemq/data log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: /opt/activemq/data/activemq.log (Permission denied) ... log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: /opt/activemq/data/audit.log (Permission denied) ... Loading message broker from: xbean:activemq.xml INFO | Refreshing org.apache.activemq.xbean.XBeanBrokerFactory$1@5bcab519: startup date [Fri Mar 16 21:10:18 UTC 2018]; root of context hierarchy WARN | Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.activemq.xbean.XBeanBrokerService#0' defined in class path resource [activemq.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: java.io.IOException: Failed to create directory '/opt/activemq/data/kahadb' ERROR | Failed to load: class path resource [activemq.xml], reason: Error creating bean with name 'org.apache.activemq.xbean.XBeanBrokerService#0' defined in class path resource [activemq.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: java.io.IOException: Failed to create directory '/opt/activemq/data/kahadb' org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.activemq.xbean.XBeanBrokerService#0' defined in class path resource [activemq.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: java.io.IOException: Failed to create directory '/opt/activemq/data/kahadb'

已解决的证明::在此处输入图像描述

4

3 回答 3

0

我创建了一个可以部署在 Openshift https://hub.docker.com/r/rangareddyv/activemq-openshift中的 activemq 映像

使用最新版本的 activemq 和 amzn-corretto-jdk-11 创建了一个镜像作为 bas 镜像,因为 openjdk 有很多 CVE 并且 alpine 不支持 jdk-11

于 2021-07-28T07:50:08.503 回答
0

为了成功部署映像,必须在集群上执行以下操作:

  1. oc adm policy add-scc-to-user anyuid -z default -n myproject --as system:admin
  2. 部署时将 ACTIVEMQ_DATA 环境变量设置为/tmp

我将继续寻找其他替代方案,包括重建映像、创建具有 $APACHEMQ_DATA 目录所需权限的 pod。

下面是在操场实例上工作的路线证明。可以粘贴它,因为 Playground 将在接下来的 10 分钟内到期。

在此处输入图像描述

于 2018-03-17T10:53:12.073 回答
0

我纠正了图像。可以在我的 fork 上找到 docker 文件: https ://github.com/beezerbt/docker-activemq/tree/master/5.14.5-openshift-v3.9.14

上面的图像可以在这里找到: https ://hub.docker.com/r/beezer/openshift-ready-mq/tags/ Tag::[5.14.5-3.9.14]

最后,由于图像具有短暂的持久性,因此可以很容易地将卷映射到/appopenshift 集群内;但是请记住,您必须将卷挂载点设置为除 /app 以外的其他内容,然后在 Openshift 控制台上的卷定义中进一步向下,指定它应该映射到容器中的哪个位置......然后是 /app。

于 2018-04-12T11:46:03.780 回答