我让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并发送我的消息。
答案 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
的使用情况。我分叉了。
注意:
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!