我在本地运行了Keycloak和Mailhog的容器。然后我想从Keycloak发送一些测试电子邮件,但我总是收到下面的错误。我已经按照底部所述进行了配置(localhost:1025
)并尝试了其他各种事情-不幸的是都没有成功。我还在stackoverflow上找到了一些关于这个主题的问题-不幸的是,那里给出的答案要么没有解决我的问题(changing the hostname),要么我不能真正理解(changing php.ini)。
keycloak-custom-keycloak-1 | com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 1025; timeout 10000;
keycloak-custom-keycloak-1 | nested exception is:
keycloak-custom-keycloak-1 | java.net.ConnectException: Connection refused (Connection refused)
从我所看到的,我已经配置一切正确,检查是否容器运行与正确的端口,但我仍然得到这个错误。(细节见下文)。
我的docker-compose.yml
文件如下所示:
version: '3.3'
services:
keycloak:
image: jboss/keycloak #:${KEYCLOAK_VERSION}
ports:
- "8080:8080"
environment:
- KEYCLOAK_USER=${KEYCLOAK_USER}
- KEYCLOAK_PASSWORD=${KEYCLOAK_PASSWORD}
- DB_DATABASE=${KEYCLOAK_DATABASE_NAME}
- DB_USER=${KEYCLOAK_DATABASE_USER}
- DB_PASSWORD=${KEYCLOAK_DATABASE_PASSWORD}
- DB_ADDR=${KEYCLOAK_DATABASE_HOST}
- DB_VENDOR=${KEYCLOAK_DATABASE_VENDOR}
- KEYCLOAK_IMPORT=/tmp/realm-export.json
volumes:
- ./keycloak/realms/realm-export.json:/tmp/realm-export.json
- ./keycloak/scripts/disable-theme-cache.cli:/opt/jboss/startup-scripts/disable-theme-cache.cli
- ./keycloak/themes/gesetzeio:/opt/jboss/keycloak/themes/gesetzeio
networks:
internal:
depends_on:
- keycloakdb
keycloakdb:
image: postgres:${POSTGRES_VERSION}
ports:
- "5433:5432"
environment:
- POSTGRES_USER=${KEYCLOAK_DATABASE_USER}
- POSTGRES_PASSWORD=${KEYCLOAK_DATABASE_PASSWORD}
- POSTGRES_DB=${KEYCLOAK_DATABASE_NAME}
volumes:
- keycloak-postgres:/var/lib/postgresql/data
networks:
internal:
mailhog:
image: mailhog/mailhog:latest
restart: always
ports:
- 1025:1025
- 8025:8025
volumes:
keycloak-postgres:
networks:
internal:
当我启动Mailhog容器时,我在日志中看到以下消息:
2022/12/09 16:12:28 Using in-memory storage
2022/12/09 16:12:28 [SMTP] Binding to address: 0.0.0.0:1025
2022/12/09 16:12:28 Serving under http://0.0.0.0:8025/
[HTTP] Binding to address: 0.0.0.0:8025
在Keycloak中,我输入了以下测试配置:
Screenshot of the Email settings in my local Keycloak container
我进一步尝试了以下选项--或者主机名localhost
--
0.0.0.0
127.0.0.1
- Mailhog容器的名称
keycloak-custom-mailhog-1
(建议为here)
然而,这些方法都不起作用。
我做错了什么?
1条答案
按热度按时间fnvucqvd1#
容器之间的通信需要使用docker合成文件中声明的主机名进行。
这意味着您需要使用主机名
mailhog
,而不是127.0.0.1
(并且0.0.0.0
永远不应该工作,因为它只能在绑定时使用,其含义是“此主机的所有可用IP地址”,尽管一些工具127.0.0.1在配置为连接到www.example.com时将使用0.0.0.0)。但是,为了能够真正访问
mailhog
,您需要确保它已启动并正在运行,因此您还需要将mailhog
添加到keycloak
的depends_on
中。此外,mailhog容器必须与keycloak位于同一个虚拟网络中,因此您需要将值为internal
的networks
添加到mailhog
中。