如何在docker容器中配置spring cloud oauth2

时间:2016-02-19 09:20:34

标签: spring docker spring-cloud microservices oauth2

我遇到了micro-spring-docker的一些问题,我想也许sso token-url不正确。

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

在本地计算机中,sso服务和身份验证服务正常工作。

但不是在docker容器中,

  

问题是重定向到auth-server Timeout。

SSO(pc-gateway service)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

但是当打开身份验证页面时:http://192.168.99.100:8080

它应该被重定向到auth-server登录页面,但是它打开了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不正确。如何解决?

1 个答案:

答案 0 :(得分:2)

172.17.0.4 IP地址是内部(容器 - 容器)网络上authserver容器的IP地址,可从docker主机(虚拟机)外部访问。

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

如果您将${AUTHSERVER_PORT_9999_TCP_ADDR:localhost}更改为192.168.99.100,则应该有效。

我建议使用您在docker-compose.yml中提供的环境变量来配置IP地址(或域),例如:

${DOMAIN_NAME:192.168.99.100}

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

  

请注意"链接"环境变量被标记为已弃用,且仅为   用于默认(网桥)网络。新的链接功能不会创建   这些变量,但您可以通过 name 链接到其他容器。看到   https://docs.docker.com/engine/userguide/networking/work-with-networks/#linking-containers-in-user-defined-networks