Keycloak在docker-compose网络中

15

我想设置一个包含keycloak,postgres和webapp实例的Docker网络。

是否有一种方式可以在容器之间进行网络通信,但同时也能理解OIDC客户端重定向? 我遇到了一个问题,如果我为docker网络设置容器名称,则容器之间可以很好地通信,但是客户端无法连接到主机上docker网络之外的相同URL时,我就会遇到问题。

是否有人可以指出我需要查看哪些Docker文档以获取与DNS或主机到容器通信相关的可能解决方案?

---- 编辑 ----

澄清一下。容器之间可以使用它们的容器名称进行良好的通信,但是客户端(例如Chrome)必须使用localhost来进行所有通信。在我的OIDC连接设置中,我必须使用容器名称或localhost。如何让客户端理解容器名称以便进行正确请求?

version: '2'

services:

  ui:
    container_name: 'ui'
    image: 'bdparrish/ui:0.1'
    build:
      context: .
      dockerfile: ./ui/Dockerfile
    ports:
      - "8085:80"
    depends_on:
      - "postgres"
      - "keycloak"
    networks:
      - auth-network
    environment:
      - ASPNETCORE_ENVIRONMENT=Docker

  postgres:
    container_name: postgres
    image: 'postgres'
    environment:
      POSTGRES_PASSWORD: password
    ports:
      - "5432:5432"
    networks:
      - auth-network

  keycloak:
    container_name: keycloak
    image: jboss/keycloak
    ports: 
      - "8080:8080"
    depends_on:
      - postgres
    environment:
      DB_VENDOR: "POSTGRES"
      DB_ADDR: postgres
      DB_PORT: 5432
      DB_USER: keycloak
      DB_PASSWORD: password
      KEYCLOAK_USER: admin
      KEYCLOAK_PASSWORD: password
    restart: always
    networks:
      - auth-network

networks:
  auth-network:
    driver: bridge

你能发布一下你的容器名称设置吗?进入Docker网络对于容器来说不应该是一个问题。如果你的容器是公开可访问的,OIDC应该可以正常工作。 - Aritz
2个回答

7
您不必修改 etc/hosts 文件。针对此目的,keycloak 有一个名为 KEYCLOAK_FRONTEND_URL 的环境变量。
编辑您的 Docker Compose 文件,使其如下所示:
version: '2'

services:

  ui:
    container_name: 'ui'
    image: 'bdparrish/ui:0.1'
    build:
      context: .
      dockerfile: ./ui/Dockerfile
    ports:
      - "8085:80"
    depends_on:
      - "postgres"
      - "keycloak"
    networks:
      - auth-network
    environment:
      - ASPNETCORE_ENVIRONMENT=Docker

  postgres:
    container_name: postgres
    image: 'postgres'
    environment:
      POSTGRES_PASSWORD: password
    ports:
      - "5432:5432"
    networks:
      - auth-network

  keycloak:
    container_name: keycloak
    image: jboss/keycloak
    ports: 
      - "8080:8080"
    depends_on:
      - postgres
    environment:
      DB_VENDOR: "POSTGRES"
      DB_ADDR: postgres
      DB_PORT: 5432
      DB_USER: keycloak
      DB_PASSWORD: password
      KEYCLOAK_USER: admin
      KEYCLOAK_PASSWORD: password
      KEYCLOAK_FRONTEND_URL: http://localhost:8080/auth
    restart: always
    networks:
      - auth-network

networks:
  auth-network:
    driver: bridge

登录后应将页面重定向到该URL。


2
您只需要将一个条目添加到您的hosts文件中即可:
  • Windows: C:\Windows\System32\drivers\etc\hosts
  • Linux: /etc/hosts

在文件末尾添加以下内容:127.0.0.1 keycloak

然后使用keycloak:8080代替localhost:8080与您的Keycloak服务器通信。您仍然可以使用localhost:8580在浏览器中访问UI。


1
我相信手动配置的方法是存在的,就像你所说的那样,但我更希望找到一个可以纠正这个问题甚至是令牌请求工作流程配置的Keycloak配置。 - bdparrish
1
正如在这里指出的:https://dev59.com/aFMI5IYBdhLWcg3wCW_G,似乎没有更好的方法。 - dve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接