如何在Docker容器中configurationspring cloud oauth2

我遇到了一些微泉docker问题,我想可能是sso token-url不正确。

演示https://github.com/keryhu/micro-oauth2-docker

在本地计算机上,sso服务和auth服务工作正常。

但不是在docker集装箱,

问题是redirect到auth-server超时。

SSO(pc-gateway服务)application.yml:

security: user: password: none oauth2: client: accessTokenUri: http://${AUTHSERVER_PORT_9999_TCP_ADDR:localhost}:9999/uaa/oauth/token userAuthorizationUri: http://${AUTHSERVER_PORT_9999_TCP_ADDR:localhost}:9999/uaa/oauth/authorize 

泊坞窗,compose.yml

 eureka: image: eureka:0.0.1-SNAPSHOT container_name: eureka hostname: eureka ports: - "8761:8761" configserver: image: config-server:0.0.1-SNAPSHOT container_name: configserver hostname: configserver links: - eureka ports: - "8888:8888" authserver: image: auth-server:0.0.1-SNAPSHOT container_name: authserver hostname: authserver links: - eureka - configserver ports: - "9999:9999" pcgateway: image: pc-gateway:0.0.1-SNAPSHOT container_name: pcgateway hostname: pcgateway links: - eureka - configserver - authserver ports: - "8080:8080" 

在Docker容器中启动后:

http://192.168.99.100:8761/显示:

 Instances currently registered with Eureka Application AMIs Availability Zones Status AUTHSERVER n/a(1) (1) UP (1) - authserver:authserver:9999 CONFIGSERVER n/a(1) (1) UP (1) - configserver:configserver:8888 PCGATEWAY n/a(1) (1) UP (1) - pcgateway:pcgateway:8080 

但是当打开validation页面时: http : //192.168.99.100 : 8080

它应该被redirect到auth-serverlogin页面,但是它打开了Timeout,地址栏是:

 http://172.17.0.4:9999/uaa/oauth/authorize?client_id=clientapp&redirect_uri=http://192.168.99.100:8080/login&response_type=code&state=cdXhfg 

我不知道为什么,也许上面的sso tokenurl是不正确的。 如何解决?

172.17.0.4 IP地址是内部 (容器 – 容器)networking上的authserver容器的IP地址, 不能从docker主机(虚拟机)外部访问。

这可能会非常棘手,因为(在这种情况下)您需要提供Docker运行的虚拟机的IP地址,这可能会改变 ,而且在生产中肯定会有所不同。

如果将${AUTHSERVER_PORT_9999_TCP_ADDR:localhost}更改${AUTHSERVER_PORT_9999_TCP_ADDR:localhost} 192.168.99.100 ,则应该可以工作。

我build议使用您在docker-compose.yml中提供的环境variables来configurationIP地址(或域),如下所示:

 ${DOMAIN_NAME:192.168.99.100} 

其中默认为虚拟机的“标准”IP地址。 在生产中,您可以传递您的项目运行的服务器的实际域名或IP地址。

请注意,“链接”环境variables被标记为废弃,并且仅在默认(网桥)networking上使用。 新的链接function不会创build这些variables,但您可以简单地链接到其他容器的名称 。 见https://docs.docker.com/engine/userguide/networking/work-with-networks/#linking-containers-in-user-defined-networks