2

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

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

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

但不在 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 不正确。如何解决?

4

1 回答 1

3

172.17.0.4IP 地址是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

于 2016-02-19T10:02:01.327 回答