gpt4 book ai didi

asp.net - swarm 中的 Docker 容器无法看到对方

转载 作者:IT王子 更新时间:2023-10-29 06:09:33 26 4
gpt4 key购买 nike

我刚刚开始学习 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 设置为绑定(bind)到 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 将允许任何容器在同一网络中查看它。如果我的假设有误,请告诉我。

这是使这些容器通信的正确方法吗?

谢谢

最佳答案

127.0.0.1 与 0.0.0.0 的描述取自 https://superuser.com/questions/949428/whats-the-difference-between-127-0-0-1-and-0-0-0-0

127.0.0.1 和 0.0.0.0 有什么区别?

127.0.0.1 是环回地址(也称为 localhost)。

0.0.0.0 是不可路由的元地址,用于指定无效、未知或不适用的目标(无特定地址占位符)。

在路由条目的上下文中,它通常表示默认路由。

In the context of servers, 0.0.0.0 means "all IPv4 addresses on the local machine". If a host has two IP addresses, 192.168.1.1 and 10.1.2.1, and a server running on the host listens on 0.0.0.0, it will be reachable at both of those IPs.

那么这是什么意思呢?这意味着在您的隔离应用程序容器中,您告诉应用程序在本地主机上查看此端口上的 Redis 实例,这不是真的,因为 Redis 正在运行一个单独的隔离 Redis 容器。

您想要做的是在您的应用程序中使用您的 webfarm_redis 名称,这将询问 Docker DNS 服务 webfarm_redis 在哪里,它会给您 docker 的Redis IP.

services.AddDistributedRedisCache(options =>
{
options.Configuration = “webfarm_redis”;
options.InstanceName = “redisInstance”;
});

我会将 webfarm_redis 作为环境变量传递,这样它就可以在不重新构建的情况下进行更改。

关于asp.net - swarm 中的 Docker 容器无法看到对方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48309079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com