我有一个web应用程序,它使用了一个postgres数据库,一个redis和一个artemis服务器。所有这些都在docker容器中工作,但我不能让应用程序使用容器名称连接到redis或artemis(使用postgres可以)。我的docker compose:
version: '3.9'
services:
my_web_app:
container_name: "my_web_app"
image: my_image
restart: always
environment:
REDIS_HOST: ${REDIS_HOST}
REDIS_PORT: ${REDIS_PORT}
ARTEMIS_HOST: ${ARTEMIS_HOST}
ARTEMIS_PORT: ${ARTEMIS_PORT}
ARTEMIS_USER: ${ARTEMIS_USER}
JDBC_URL: ${JDBC_URL}
JDBC_USERNAME: ${JDBC_USERNAME}
JDBC_PASSWORD: ${JDBC_PASSWORD}
...
ports:
- 8080:8080
depends_on:
- my_redis
- my_artemis
- my_postgres
networks:
- my_network
my_postgres:
container_name: "my_postgres"
image: "postgis/postgis"
environment:
POSTGRES_USER: ${JDBC_USERNAME}
POSTGRES_PASSWORD: ${JDBC_PASSWORD}
POSTGRES_DB: ${DB_NAME}
ports:
- 5432:5432
networks:
- my_network
my_redis:
container_name: "my_redis"
image: redis
ports:
- 6379:6379
networks:
- my_network
my_artemis:
container_name: "my_artemis"
image: vromero/activemq-artemis:2.16.0
environment:
ARTEMIS_USERNAME: quarkus
ARTEMIS_PASSWORD: quarkus
ENABLE_JMX_EXPORTER: "true"
ports:
- 61616:61616
- 8161:8161
- 5672:5672
networks:
- my_network:
networks:
my_network:
我试过设置网络别名,域名或主机名,但没有工作。我的健康检查:
{
"status": "DOWN",
"checks": [
{
"name": "Database connections health check",
"status": "UP"
},
{
"name": "Redis connection health check",
"status": "DOWN",
"data": {
"reason": "client [<default>]: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:6379"
}
},
{
"name": "Artemis JMS health check",
"status": "DOWN"
}
]
}
My .env:
REDIS_HOST=my_redis
REDIS_PORT=6379
ARTEMIS_HOST=my_artemis
ARTEMIS_PORT=61616
ARTEMIS_USER=quarkus
ARTEMIS_PASSWORD=quarkus
JDBC_URL=jdbc:postgresql://my_postgres:5432/my_db
JDBC_USERNAME=quarkus
JDBC_PASSWORD=quarkus
DB_NAME=my_db
我的 quarkus application.properties
quarkus.artemis.url=tcp://${ARTEMIS_HOST}:${ARTEMIS_PORT}
quarkus.artemis.username=${ARTEMIS_USER}
quarkus.artemis.password=${ARTEMIS_PASSWORD}
quarkus.redis.hosts=redis://${REDIS_HOST}:${REDIS_PORT}
quarkus.datasource.jdbc.url=${JDBC_URL}
quarkus.datasource.username=${JDBC_USERNAME}
quarkus.datasource.password=${JDBC_PASSWORD}
我的postgres设置(它工作):
jdbc:postgresql://my_postgres:5433/db_name
我对redis和artemis的配置:
Redis://我的Redis:6379
tcp://my_artemis:61616
唯一起作用的是设置网络和固定的ip,并使用ip而不是容器名称,但我想使用容器名称。有什么想法吗?
1条答案
按热度按时间roqulrg31#
我已经解决了我的问题,但我不太明白原因,我想这是Quarkus框架的问题。我不得不把这些服务称为“redis”和“artemis”。
并在环境变量文件中配置其值:
这样它才能正常工作。