主机名无法与Docker compose和redis一起使用

mmvthczy  于 2023-10-15  发布在  Redis
关注(0)|答案(1)|浏览(146)

我有一个web应用程序,它使用了一个postgres数据库,一个redis和一个artemis服务器。所有这些都在docker容器中工作,但我不能让应用程序使用容器名称连接到redis或artemis(使用postgres可以)。我的docker compose:

  1. version: '3.9'
  2. services:
  3. my_web_app:
  4. container_name: "my_web_app"
  5. image: my_image
  6. restart: always
  7. environment:
  8. REDIS_HOST: ${REDIS_HOST}
  9. REDIS_PORT: ${REDIS_PORT}
  10. ARTEMIS_HOST: ${ARTEMIS_HOST}
  11. ARTEMIS_PORT: ${ARTEMIS_PORT}
  12. ARTEMIS_USER: ${ARTEMIS_USER}
  13. JDBC_URL: ${JDBC_URL}
  14. JDBC_USERNAME: ${JDBC_USERNAME}
  15. JDBC_PASSWORD: ${JDBC_PASSWORD}
  16. ...
  17. ports:
  18. - 8080:8080
  19. depends_on:
  20. - my_redis
  21. - my_artemis
  22. - my_postgres
  23. networks:
  24. - my_network
  25. my_postgres:
  26. container_name: "my_postgres"
  27. image: "postgis/postgis"
  28. environment:
  29. POSTGRES_USER: ${JDBC_USERNAME}
  30. POSTGRES_PASSWORD: ${JDBC_PASSWORD}
  31. POSTGRES_DB: ${DB_NAME}
  32. ports:
  33. - 5432:5432
  34. networks:
  35. - my_network
  36. my_redis:
  37. container_name: "my_redis"
  38. image: redis
  39. ports:
  40. - 6379:6379
  41. networks:
  42. - my_network
  43. my_artemis:
  44. container_name: "my_artemis"
  45. image: vromero/activemq-artemis:2.16.0
  46. environment:
  47. ARTEMIS_USERNAME: quarkus
  48. ARTEMIS_PASSWORD: quarkus
  49. ENABLE_JMX_EXPORTER: "true"
  50. ports:
  51. - 61616:61616
  52. - 8161:8161
  53. - 5672:5672
  54. networks:
  55. - my_network:
  56. networks:
  57. my_network:

我试过设置网络别名,域名或主机名,但没有工作。我的健康检查:

  1. {
  2. "status": "DOWN",
  3. "checks": [
  4. {
  5. "name": "Database connections health check",
  6. "status": "UP"
  7. },
  8. {
  9. "name": "Redis connection health check",
  10. "status": "DOWN",
  11. "data": {
  12. "reason": "client [<default>]: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:6379"
  13. }
  14. },
  15. {
  16. "name": "Artemis JMS health check",
  17. "status": "DOWN"
  18. }
  19. ]
  20. }

My .env:

  1. REDIS_HOST=my_redis
  2. REDIS_PORT=6379
  3. ARTEMIS_HOST=my_artemis
  4. ARTEMIS_PORT=61616
  5. ARTEMIS_USER=quarkus
  6. ARTEMIS_PASSWORD=quarkus
  7. JDBC_URL=jdbc:postgresql://my_postgres:5432/my_db
  8. JDBC_USERNAME=quarkus
  9. JDBC_PASSWORD=quarkus
  10. DB_NAME=my_db

我的 quarkus application.properties

  1. quarkus.artemis.url=tcp://${ARTEMIS_HOST}:${ARTEMIS_PORT}
  2. quarkus.artemis.username=${ARTEMIS_USER}
  3. quarkus.artemis.password=${ARTEMIS_PASSWORD}
  4. quarkus.redis.hosts=redis://${REDIS_HOST}:${REDIS_PORT}
  5. quarkus.datasource.jdbc.url=${JDBC_URL}
  6. quarkus.datasource.username=${JDBC_USERNAME}
  7. quarkus.datasource.password=${JDBC_PASSWORD}

我的postgres设置(它工作):
jdbc:postgresql://my_postgres:5433/db_name
我对redis和artemis的配置:
Redis://我的Redis:6379
tcp://my_artemis:61616
唯一起作用的是设置网络和固定的ip,并使用ip而不是容器名称,但我想使用容器名称。有什么想法吗?

roqulrg3

roqulrg31#

我已经解决了我的问题,但我不太明白原因,我想这是Quarkus框架的问题。我不得不把这些服务称为“redis”和“artemis”。

  1. version: '3.9'
  2. services:
  3. my_web_app:
  4. container_name: "my_web_app"
  5. image: my_image
  6. restart: always
  7. environment:
  8. ...
  9. ports:
  10. - 8080:8080
  11. depends_on:
  12. - redis
  13. - artemis
  14. - my_postgres
  15. networks:
  16. - my_network
  17. my_postgres:
  18. container_name: "my_postgres"
  19. image: "postgis/postgis"
  20. environment:
  21. ...
  22. ports:
  23. - 5432:5432
  24. networks:
  25. - my_network
  26. redis:
  27. container_name: "my_redis"
  28. image: redis
  29. ports:
  30. - 6379:6379
  31. networks:
  32. - my_network
  33. artemis:
  34. container_name: "my_artemis"
  35. image: vromero/activemq-artemis:2.16.0
  36. environment:
  37. ARTEMIS_USERNAME: quarkus
  38. ARTEMIS_PASSWORD: quarkus
  39. ENABLE_JMX_EXPORTER: "true"
  40. ports:
  41. - 61616:61616
  42. - 8161:8161
  43. - 5672:5672
  44. networks:
  45. - my_network:
  46. networks:
  47. my_network:

并在环境变量文件中配置其值:

  1. REDIS_HOST=redis
  2. REDIS_PORT=6379
  3. ARTEMIS_HOST=artemis
  4. ARTEMIS_PORT=61616

这样它才能正常工作。

展开查看全部

相关问题