代码之家  ›  专栏  ›  技术社区  ›  Dispersia

swarm中的Docker容器无法相互看到

  •  2
  • Dispersia  · 技术社区  · 8 年前

    我刚刚开始学习docker。我有一个swarm正在运行,我正在尝试获取我的asp。net核心应用程序与redis服务器通信。我认为我不会有这么多问题:(

    我的docker撰写:

    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”;
    });
    

    如果我手动运行redis服务器和我的asp。在docker之外的net core应用程序,他们互相看到,一切正常,但我无法让它在docker内部工作。

    如果我运行docker inspect network prod\u default,我会发现这两个容器都在运行,它们的IP确实不同(10.0.0.6/24)和(10.0.0.4/24),但是我认为0.0.0.0会允许任何容器在同一网络中看到它。如果我错了,请告诉我。

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

    谢谢

    1 回复  |  直到 8 年前
        1
  •  3
  •   Shawn C. php_node    8 年前

    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 是一个不可路由的元地址,用于指定无效、未知或不适用的目标(无特定地址占位符)。

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

    在服务器环境中, 0.0.0.0 表示“上的所有IPv4地址” 如果主机有两个IP地址, 192.168.1.1 10.1.2.1 ,主机上运行的服务器将侦听 0.0.0.0 ,在这两个IP上都可以访问它。

    那么这意味着什么呢?这意味着在隔离的应用程序容器中,您告诉应用程序查看本地主机 Redis 实例,这与 Redis公司 在单独的隔离环境中运行 Redis公司 容器

    你想做的是使用你的 webfarm_redis 将询问Docker DNS服务的应用程序中的名称在哪里 webfarm\u redis 它会给你码头工人的 Redis公司 IP。

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

    我会通过 webfarm\u redis 作为环境变量,因此无需重新构建即可更改。