Docker 无法设置本地主机。这将阻止创建GUID

Docker 无法设置本地主机。这将阻止创建GUID,docker,nginx,docker-swarm,Docker,Nginx,Docker Swarm,我正在努力解决以下问题。我们有一个在Docker上正常运行的Java应用程序。现在,当我们尝试将应用程序迁移到Docker Swarm(将其作为服务运行)时,它总是抛出以下异常: Cache - Unable to set localhost. This prevents creation of a GUID. Cause was: 39bc5cdfb3d9: 39bc5cdfb3d9: Name or service not known java.net.UnknownHostExcepti

我正在努力解决以下问题。我们有一个在Docker上正常运行的Java应用程序。现在,当我们尝试将应用程序迁移到Docker Swarm(将其作为服务运行)时,它总是抛出以下异常:

 Cache - Unable to set localhost. This prevents creation of a GUID. Cause was: 39bc5cdfb3d9: 39bc5cdfb3d9: Name or service not known
java.net.UnknownHostException: 39bc5cdfb3d9: 39bc5cdfb3d9: Name or service not known
请注意,
39bc5cdfb3d9
是容器ID

我尝试了以下方法:

  • curl
    针对我们正在使用的DNS
  • 正在更新另一台服务器正在备份的
    nginx
    配置
  • 设置:

  • 3个经理
  • 容器仅在2台服务器app1.dev和app2.dev上运行。它有一个约束标签=dev
  • 使用默认网络入口
  • DNS:dev-ecc.toroserver.com 我使用以下命令运行服务:

         docker service create \
                ${HTTP} \
                ${HTTPS} \
                ${VOLUMES} \
                ${ENV_VARS} \
                ${LICENSE} \
                ${LOGS} \
                --limit-memory 768mb \
                --mode=global \
                --constraint 'engine.labels.serverType == dev' \
                --env appName="${SUB_DNS}" \
                --name="${SUB_DNS}" \
                --restart-condition on-failure --restart-max-attempts 5 \
                --with-registry-auth \
                ${DOCKER_REGISTRY}/${DOCKER_USER}/${APPNAME}:${VERSION}
    
    此外,我每次尝试登录时都会遇到此错误,它会自动注销我的会话,不确定是否与无法设置localhost的错误有关

    2017-11-08 03:25:56,771 [ INFO] AjaxTimeoutRedirectFilter - User session expired or not logged in yet
    2017-11-08 03:25:56,771 [ INFO] AjaxTimeoutRedirectFilter - User session expired or not logged in yet
    2017-11-08 03:25:56,778 [ INFO] AjaxTimeoutRedirectFilter - Redirect to login page
    2017-11-08 03:25:56,778 [ INFO] AjaxTimeoutRedirectFilter - Redirect to login page
    2017-11-08 03:30:36,822 [ INFO] AjaxTimeoutRedirectFilter - User session expired or not logged in yet
    2017-11-08 03:30:36,822 [ INFO] AjaxTimeoutRedirectFilter - User session expired or not logged in yet
    
    任何见解都将不胜感激。谢谢。

    缓存-无法设置本地主机看起来是来自的常见错误消息。在代码中找到它表明这是调用Java net库的
    Java.net.InetAddress.getLocalHost()
    方法的结果,该方法查找本地主机名,然后尝试通过DNS将其解析为IP地址


    一个快速的本地测试表明,这既适用于
    docker运行
    ,也适用于我的单节点Swarm上的服务。如果您提到测试DNS,那么此时可能需要更多关于您的特定Swarm设置(特别是网络)的信息,以了解您为什么会有不同的行为。显然,如果你有自己的DNS,那么根据上面的说明,容器的默认名称必须可以通过DNS查找来解析,否则你将继续得到Java
    未知的HostException

    你是如何启动/配置swarm和Java应用程序的,你能分享它们吗。编辑了我的帖子。我在这里介绍了如何启动服务。我更新了帖子,介绍了设置和如何运行服务。谢谢你的回复。