无法设置本地主机。 这可以防止创build一个GUID

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

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. 对我们正在使用的DNS进行curl
  2. 更新其他服务器备份的nginxconfiguration

build立:

  1. 3个pipe理员
  2. 容器只在2台服务器app1.dev和app2.dev上运行,它有一个约束标签= dev
  3. 使用默认networking入口,

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} 

另外我每次尝试login都会出现这个错误,它会自动注销我的会话,不确定是否与错误有关无法设置本地主机

 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 

任何见解将不胜感激。 谢谢。

caching – 无法设置本地主机 ”看起来是从EHCache项目的常见错误消息。 在代码中发现,这是调用Javanetworking库的java.net.InetAddress.getLocalHost()方法的结果,该方法查找本地主机名,然后尝试将DNSparsing为IP地址。

一个快速的本地testing表明,这对docker run和我的单节点Swarm上的服务都有效。 鉴于你提到testingDNS,也许在这一点上需要更多的信息关于你的具体Swarm设置(特别是networking),看看为什么你得到不同的行为。 显然,如果你有自己的DNS,那么按照上面的说明,容器的默认名称必须通过DNS查找来parsing,否则你将继续得到Java UnknownHostException