Docker容器上Wildfly中的ActiveMQ给出:无效"主机"价值" 0.0.0.0"检测

时间:2017-01-18 11:00:24

标签: docker activemq wildfly

我让Wildfly在Docker容器中运行。 在Wildfly中,messaging-activemq子系统处于活动状态。 子系统和扩展默认值取自standalone-full.xml文件。

启动wildfly后,显示以下输出

[org.apache.activemq.artemis.jms.server] (ServerService Thread Pool -- 64)
AMQ121005: Invalid "host" value "0.0.0.0" detected for "http-connector" connector.
Switching to "eeb79399d447".
If this new address is incorrect please manually configure the connector to use the proper one.

eeb79399d447是泊坞窗容器ID。 从我的java客户端连接到jms也是不可能的。连接时会出现以下错误。

AMQ214016: Failed to create netty connection: java.net.UnknownHostException: eeb79399d447

当我在本地工作站(docker之外)启动wildfly时,问题不会发生,我可以连接到jms并发送我的消息。

2 个答案:

答案 0 :(得分:0)

你需要编辑standalone-full.xml以应对NAT后面的jms,当你运行docker容器时,通过你的jms客户端可以用来连接的ip和端口,这是运行docker的机器的ip在Dockers的默认配置

答案 1 :(得分:0)

以下是一些选项。选项1& 2可能是你要求的,但最终对我不起作用。然而,选项3,我认为将更好地解决您的意图。



选项1)您可以通过在Docker镜像中添加一些脚本(而不是触及standalone-full.xml来实现此目的。基本想法(归功于git-hub用户kwart)是为了制作一个docker入口点,可以在调用standalone.sh之前确定docker容器的IPv4地址。

请参阅:https://github.com/kwart/dockerfiles/tree/master/wildfly-ext并查看WILDFLY_BIND_ADDR的使用情况。我分叉了。

注意:

  • GetIp.java将打印出IPv4地址(并将其复制到容器中)
  • dockerentry-point.sh根据需要调用GetIp.java
    WILDFLY_BIND_ADDR=${WILDFLY_BIND_ADDR:-0.0.0.0}
    if [ "${WILDFLY_BIND_ADDR}" = "auto" ]; then   
      WILDFLY_BIND_ADDR=`java -cp /opt/jboss GetIp`
    fi



选项2)或者,使用一些script-fu,您可以在Dockerfile中完成所需的一切:

#CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-c", "standalone-full.xml", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0"]
CMD ["sh", "-c", "DOCKER_IPADDR=$(hostname --ip-address) && echo IP Address was $DOCKER_IPADDR && /opt/jboss/wildfly/bin/standalone.sh -c standalone-full.xml -b=$DOCKER_IPADDR -bmanagement=$DOCKER_IPADDR"]

您的里程可能非常。

我正在使用WildFly文档中的helloworld-jms快速入门,并且必须跳过一些额外的箍来创建JMS队列。即使在那时,示例java代码也无法与选项1或选项2连接。




选项3)这对我有用btw )启动容器并绑定到0.0.0.0,为主机上运行的JMS客户端公开8080端口,并添加一个在主机的/ etc / hosts文件中输入:

Dockerfile:

FROM jboss/wildfly
# CP foo.war /opt/jboss/wildfly/standalone/deployments/
RUN /opt/jboss/wildfly/bin/add-user.sh admin admin --silent
RUN /opt/jboss/wildfly/bin/add-user.sh -a quickstartUser quickstartPwd1! --silent
RUN echo "quickstartUser=guest" >> /opt/jboss/wildfly/standalone/configuration/application-roles.properties
# use standalone-full.xml to enable the JMS feature
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-c", "standalone-full.xml", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0"]

Build&运行(如果您的客户端在您的主机上,则公开8080)

docker build -t mywildfly .
docker run -it --rm --name jboss -p127.0.0.1:8080:8080 -p127.0.0.1:9990:9990 my_wildfly

然后在主机上(我正在运行OSX;我的jboss容器的id是46d04508b92b)在/etc/hosts中为docker-host-name添加一个指向127.0.0.1的条目:

127.0.0.1 46d04508b92b  # <-- replace with your container's id

一旦wildfly容器运行,您可以通过脚本或管理控制台创建/配置testQueue。我的配置来自https://github.com/wildfly/quickstart.git文件夹下的helloworld-jms

docker cp configure-jms.cli jboss:/tmp/
docker exec jboss /opt/jboss/wildfly/bin/jboss-cli.sh --connect --file=/tmp/configure-jms.cli 
来自mvn clean compile exec:java主机的

和SUCCESS(来自helloworld-jms文件夹中的w /):

Mar 28, 2018 9:03:15 PM org.jboss.as.quickstarts.jms.HelloWorldJMSClient main
INFO: Found destination "jms/queue/test" in JNDI
Mar 28, 2018 9:03:16 PM org.jboss.as.quickstarts.jms.HelloWorldJMSClient main
INFO: Sending 1 messages with content: Hello, World!
Mar 28, 2018 9:03:16 PM org.jboss.as.quickstarts.jms.HelloWorldJMSClient main
INFO: Received message with content Hello, World!