我只是在深入研究容器的工作原理,并且已经走得很远了,但是当将一些图像编排到一个项目的yml文件中时,我在绕圈子。
所以我有以下图片:
- redash/redash:latest <--主应用程序.
- redis:latest
- postgres:latest
我为每个服务打开了所有的端口,并测试了我可以在同一个容器中从adminer:latest登录到postgres数据库。
我使用了gitrepos和其他堆栈文章中的一些不同示例来构建bellow yml文件,并得到了@大卫迷宫的帮助。
我现在相信我缺少Redash的数据库设置文件。与我的数据库交互的scheduler
给了我:ProgrammingError: (psycopg2.ProgrammingError) relation “queries” does not exist
我发现这篇文章:discuss.redash.io;海报在同一点上。一个答复者说:“你创建了数据库表吗?“
看起来我需要从一个Redash服务器控制台运行这个命令:docker-compose run --rm server create_db
但我使用的是Synology的ContainerManager,而不是Docker。
我需要一个卷来连接到server create_db
命令吗?
该网站上的登录被禁用,否则我会尝试在那里问这个问题。
以下是我更新的YML:
version: "3.1"
x-redash-service: &redash-service
image: redash/redash:latest
depends_on:
- db
- cache
restart: always
x-redash-env: &redash-env
PYTHONUNBUFFERED: 0
REDASH_LOG_LEVEL: "INFO"
REDASH_REDIS_URL: "redis://cache:6379/0"
REDASH_DATABASE_URL: "postgresql://postgres:postgresPassword@db/postgres"
services:
redash:
<<: *redash-service
command: server
ports:
- "5003:5000"
environment:
<<: *redash-env
REDASH_WEB_WORKERS: 4
adhoc_worker:
<<: *redash-service
command: worker
environment:
<<: *redash-env
QUEUES: "queries"
WORKERS_COUNT: 2
scheduler:
<<: *redash-service
command: scheduler
environment:
<<: *redash-env
QUEUES: "celery"
WORKERS_COUNT: 1
scheduled_worker:
<<: *redash-service
command: worker
environment:
<<: *redash-env
QUEUES: "scheduled_queries,schemas"
WORKERS_COUNT: 1
db:
image: postgres:latest
restart: always
ports:
- "5433:5432"
volumes:
- ./postgres/data:/var/lib/postgresql/data:rw
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgresPassword
POSTGRES_DB: postgresDatabase
#command: "create_db"
nginx:
image: redash/nginx:latest
ports:
- "2501:80"
depends_on:
- redash
restart: always
cache:
image: redis:latest
restart: always
depends_on:
- db
ports:
- "6379:6379"
volumes:
- ./redis/data:/data:rw
再次感谢!
请让我知道我是否应该提供进一步的细节。
EDIT_1:Update yml composition and status of build
EDIT_2:Update yml composition and status of build && Narrowed scope of issue.
1条答案
按热度按时间wko9yo5t1#
如您所示,Compose文件中有两个值得注意的问题。
目前尚不清楚IP地址192.168.x.x来自何处,但您不需要IP地址来在容器之间建立连接。Compose服务名(如
db
和cache
)可直接用作主机名。容器之间的连接根本不使用或考虑ports:
,因此您需要为这些服务使用标准端口号(如果您不需要从Docker外部连接到其他服务,则可以删除其他服务的ports:
)。另一个问题是,您的数据存储在单独的
redis_net
上,但您的应用程序和工作线程却不在。Compose创建一个名为default
的网络,并将容器连接到该网络。由于redash
容器仅在default
网络上,而db
仅在redis_net
网络上,因此它们不共享网络,无法相互通信。最简单的解决方案是删除文件中所有的
networks:
块。一切都将使用Compose提供的default
网络。这两个主题将在Docker文档的Networking in Compose中进一步讨论。