【发布时间】:2018-06-26 19:18:31
【问题描述】:
我刚刚开始学习 docker。我有一个 swarm 正在运行,我正试图让我的 asp.net 核心应用程序与 redis 服务器通信。我没想到我会有这么多问题:(
我的 docker-compose:
version: ‘3.3’
services:
webfarm_api:
image: dispersia/webfarm.api
ports:
- 8080:80
environment:
- SERVICE_PORTS=8080
depends_on:
- webfarm_redis
webfarm_redis:
image: dispersia/redis
ports:
- 6379:6379
volumes:
- ‘redis:/data’
volumes:
redis:
我已将我的 redis.conf 设置为绑定到 0.0.0.0,并且在我的应用程序中
services.AddDistributedRedisCache(options =>
{
options.Configuration = “0.0.0.0”;
options.InstanceName = “redisInstance”;
});
如果我在 docker 之外手动运行 redis-server 和我的 asp.net 核心应用程序,它们会互相看到并且一切正常,但我终生无法让它在 docker 内部运行。
如果我运行 docker inspect network prod_default 我会发现两个容器都在运行,并且它们确实有不同的 IP (10.0.0.6/24) 和 (10.0.0.4/24) 但是我认为 0.0.0.0 将允许任何容器在同一网络中查看它。如果我的假设有误,请告诉我。
这是使这些容器通信的正确方法吗?
谢谢
【问题讨论】:
-
另外请注意,您的容器不在同一个网络中。您的 docker-compose 中没有“网络”部分。见docker-compose docs
-
@Tseng 当我通过 swarm 初始化我的 compose 文件时,它会根据名称创建一个默认网络,例如:
docker stack deploy --compose-file=docker-compose.yml prod将创建一个prod_bridge并自动连接任何通过它打开的容器它在那个网络下
标签: asp.net docker asp.net-core redis docker-swarm