Docker-compose网络中的Keycloak

bdp*_*ish 7 openid-connect keycloak docker-compose

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

有没有办法在容器之间进行网络通信,还能理解oidc客户端重定向?我有一个问题,容器可以互相交谈,如果我设置OIDC与docker网络的容器名称,但后来我遇到了客户端的问题,无法连接到Docker网络之外的那些相同的URL主机.

任何人都可以指向正确的docker文档来查看可能的DNS解决方案或主机到容器通信吗?

----编辑----

澄清.容器可以在容器名称下相互通信,但客户端(即Chrome)必须使用localhost与所有内容进行通信.在我的ui Web应用程序中的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
Run Code Online (Sandbox Code Playgroud)

Pat*_*ner 7

您不必修改etc/hosts 文件。KEYCLOAK_FRONTEND_URL为此,keycloak 有一个名为 especial 的环境变量。

编辑您的 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
Run Code Online (Sandbox Code Playgroud)

然后登录应该被重定向到该 url。


IMR*_*MRZ 2

您需要做的就是向您的主机文件添加一个条目:

  • 视窗:C:\Windows\System32\drivers\etc\hosts
  • Linux:/etc/hosts

将其附加到文件末尾: 127.0.0.1 keycloak

然后使用keycloak:8080您的 UI 与您的 keycloak 服务器对话,而不是使用localhost:8080. 您仍然可以使用localhost:8580浏览器来访问 UI。