gpt4 book ai didi

docker - Docker 容器上 Wildfly 中的 ActiveMQ 给出 : Invalid "host" value "0.0.0.0" detected

转载 作者:行者123 更新时间:2023-12-02 18:07:52 25 4
gpt4 key购买 nike

我让 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 是 docker 容器 ID。
从我的 java 客户端连接到 jms 也是不可能的。连接时出现以下错误。
AMQ214016: Failed to create netty connection: java.net.UnknownHostException: eeb79399d447

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

最佳答案

这里有几个选项。选项 1 和 2 可能是您要求的,但最终对我不起作用。但是,我认为选项 3 会更好地解决您的意图。

选项 1) 您可以通过向您的 docker 镜像添加一些脚本来做到这一点(而不是接触您的 standalone-full.xml。基本思想(归功于 git-hub 用户 kwart)是创建一个可以确定 docker 的 IPv4 地址的 docker 入口点调用 standalone.sh 之前的容器。

见:https://github.com/kwart/dockerfiles/tree/master/wildfly-ext并查看 WILDFLY_BIND_ADDR 的用法.我把它 fork 了。

笔记:

  • 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"]

    你的里程可能很。

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


    选项 3) (顺便说一句,这对我有用)通过绑定(bind)到 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"]

    构建并运行(如果您的客户端在您的主机上,则公开 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 中添加一个条目对于指向 127.0.0.1 的 docker-host-name:
    127.0.0.1 46d04508b92b  # <-- replace with your container's id

    Wildfly 容器运行后,您可以通过脚本或在管理控制台中创建/配置 testQueue。我的配置来自 https://github.com/wildfly/quickstart.githelloworld-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主机(来自 helloworld-jms 文件夹):
    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!

    关于docker - Docker 容器上 Wildfly 中的 ActiveMQ 给出 : Invalid "host" value "0.0.0.0" detected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41717649/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com