Composer 项目 - Synology NAS 上的 Redash + Redis + Postgres

问题描述 投票:0回答:1

我刚刚深入研究容器的工作原理,并且已经取得了很大的进展,但是当将一些图像编排到一个项目 yml 文件中时,我却在兜圈子。

所以我有以下图像:

  1. redash/redash:最新 <-- The primary app...
  2. redis:最新
  3. postgres:最新

我为每个服务打开了所有端口,并测试了我可以从 adminer:latest 在同一个容器中运行登录到 postgres 数据库。

所有容器都会运行,但是当我尝试解析我的 redash 服务器 192.168.xx.xxx:5003 时,它将在屏幕上显示一条消息,指出“发生内部服务器错误”。查看我的 redash 容器的日志,我看到一个

ConnectionError: Error 111 connecting to 192.168.xx.xxx:6379. Connection Refused

我使用了 gitrepos 和其他堆栈文章中的一些不同示例来构建以下 yml 文件。

version: "3.1" networks: redis_net: driver: bridge x-redash-service: &redash-service image: redash/redash:latest depends_on: - db - cache restart: always services: redash: <<: *redash-service command: server ports: - "5003:5000" environment: REDASH_REDIS_URL: redis://192.168.xx.xxx:6379/0 REDASH_DATABASE_URL: postgresql://192.168.xx.xxx:5433/0 REDASH_WEB_WORKERS: 4 scheduler: <<: *redash-service command: scheduler environment: QUEUES: "celery" WORKERS_COUNT: 1 scheduled_worker: <<: *redash-service command: worker environment: QUEUES: "scheduled_queries,schemas" WORKERS_COUNT: 1 adhoc_worker: <<: *redash-service command: worker environment: QUEUES: "queries" WORKERS_COUNT: 2 db: image: postgres:latest restart: always networks: - redis_net ports: - 5433:5432 volumes: - ./postgres/data:/var/lib/postgresql/data:rw environment: POSTGRES_USER: root POSTGRES_PASSWORD: ThisStrong@$$Password POSTGRES_DB: testdb cache: image: redis:latest restart: always command: redis-server --requirepass ThisStrong@$$Password ports: - 6379 volumes: - ./redis/data:/data:rw # I don't think this is being used correctly... - ./redis/redis.conf:/usr/local/etc/redis.conf networks: - redis_net

再次感谢!

如果我需要提供更多详细信息,请告诉我。

postgresql docker redis yaml synology
1个回答
0
投票

不清楚IP地址192.168.x.x来自哪里,但是容器之间的连接不需要IP地址。

db

cache
等 Compose 服务名称可直接用作主机名。容器之间的连接根本不使用或考虑
ports:
,因此您需要使用这些服务的标准端口号(如果您不需要从其他服务连接到它们,则可以删除其他服务的
ports:
) Docker 之外)。
environment:
  REDASH_REDIS_URL: redis://cache:6379/0
  REDASH_DATABASE_URL: postgresql://db:5432/0

另一个问题是您的数据存储位于单独的
redis_net

上,但您的应用程序和工作线程却不是。 Compose 创建一个名为

default
的网络并将容器附加到其上。由于
redash
容器仅位于
default
网络上,并且
db
仅位于
redis_net
上,因此它们不共享网络,并且无法相互通信。
最简单的解决方案就是删除文件中各处的 

networks:

块中的 all。一切都将使用 Compose 提供的

default
网络。
Docker 文档中的

Compose 中的网络

进一步讨论了这两个主题。

© www.soinside.com 2019 - 2024. All rights reserved.