我刚刚深入研究容器的工作原理,并且已经取得了很大的进展,但是当将一些图像编排到一个项目 yml 文件中时,我却在兜圈子。
所以我有以下图像:
我为每个服务打开了所有端口,并测试了我可以从 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
再次感谢!
如果我需要提供更多详细信息,请告诉我。
不清楚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 中的网络