我正在努力解决以下问题。我们有一个在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
配置设定:
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
任何见解都将非常感激。感谢。
答案 0 :(得分:0)
" 缓存 - 无法设置localhost "看起来是来自EHCache project的常见错误消息。在代码中发现它表明它是调用Java网络库的java.net.InetAddress.getLocalHost()
方法的结果,该方法查找本地主机名,然后尝试将DNS解析为IP地址。
快速本地测试表明,这适用于docker run
和我的单节点Swarm上的服务。鉴于您提到测试DNS,可能在此时需要有关您的特定Swarm设置(特别是网络)的更多信息,以了解您获得不同行为的原因。显然,如果你有自己的DNS,那么按照上面的说法,容器的默认名称必须可以通过DNS查找解析,否则你将继续获得Java UnknownHostException
。 / p>