当前位置: 首页 > 知识库问答 >
问题:

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

林涵映
2023-03-14

在本地计算机中,sso服务和auth-service可以很好地工作。

但不在docker容器中,

问题是重定向到验证服务器超时。

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
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"
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://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个答案

南宫泓
2023-03-14

172.17.0.4IP地址是内部(container-container)网络上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地址。

请注意,“link”环境变量被标记为deprecated,并且仅在默认(网桥)网络上使用。新的链接特性不会创建这些变量,但您可以简单地按名称链接到其他容器。请参阅https://docs.docker.com/engine/userguide/networking/work-with-networks/#linking-container-in-user-defined-networks

 类似资料:
  • 我已经创建了两个docker容器,并尝试在ubuntu、debian和一些包上安装一些应用程序,如-mc、ping、traceroute。。但每当我从集装箱里出来,我就会把里面的东西都弄丢。。是否有docker命令保存我的配置?

  • 问题内容: 这些天,我读了很多关于如何设置和运行Docker堆栈的信息。但是我一直想念的一件事是如何设置特定容器通过域名响应访问权限,而不仅仅是使用docker dns的容器名称。 我的意思是说我有一个可以从外部访问的微服务,例如:users.mycompany.com,它将进入处理用户api的微服务容器 然后,当我尝试访问customer-list.mycompany.com时,它将进入处理客户

  • 我的Dockerfile配置: 报错信息: 我已经尝试过以下几种方法: Dockerfile配置中添加RUN chmod -R 777 /yice Dockerfile配置添加 USER root,它会报: 找不Chrome,然后因为ghcr.io/puppeteer/puppeteer:latest镜像切换的用户名为pptruser,所以我手动在代码里给puppeteer配置executable

  • 然而,在我创建了另一个docker服务器并创建了其中两个服务器的群并再次尝试运行jenkins jobs之后,它仍然只在原始服务器(现在也是一个管理器)上部署容器。我希望swarm能够平衡负载,并在swarm中均匀地分配新创建的容器。我错过了什么? 也许我必须使用服务吗?

  • Dockerfile构建镜像,同时需要python和rust环境,求助 这个项目是其他人做的,他在python里面使用了一个包名叫“ploygons”,这个包好像是处理图像时比pandas还是什么快很多,但是这个包需要rust环境 cargo ,才能正常运行,在开发环境里安装rust环境还是比较轻松的。 但是我现在需要测试放在docker环境运行,然后打包发送给别人。