无法设置localhost。这可以防止创建GUID

时间:2017-11-07 03:39:44

标签: 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.UnknownHostException: 39bc5cdfb3d9: 39bc5cdfb3d9: Name or service not known

请注意,39bc5cdfb3d9是容器ID。

我尝试过以下方法:

  1. curl针对我们正在使用的DNS
  2. 更新其他服务器备份的nginx配置
  3. 设定:

    1. 3 Mangers
    2. 容器仅在2台服务器上运行app1.dev和app2.dev它有一个约束label = dev
    3. 使用默认网络入口,
    4. 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
      

      任何见解都将非常感激。感谢。

1 个答案:

答案 0 :(得分:0)

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

快速本地测试表明,这适用于docker run和我的单节点Swarm上的服务。鉴于您提到测试DNS,可能在此时需要有关您的特定Swarm设置(特别是网络)的更多信息,以了解您获得不同行为的原因。显然,如果你有自己的DNS,那么按照上面的说法,容器的默认名称必须可以通过DNS查找解析,否则你将继续获得Java UnknownHostException。 / p>