如何使用状态管理设置 dapr 和 docker compose

如何解决如何使用状态管理设置 dapr 和 docker compose

对 dapr 和 docker 非常陌生。

我跟着 dapr 开始。简单的 hello world 状态管理示例运行良好。是的,布鲁斯,我们都知道你是蝙蝠侠。

所以接下来我构建了 weather forecast multi-container example for .NET Core。这工作得很好。 (我将前端 razor 页面命名为“wxui”,后端 webapi 命名为“wxapi”)。

最后,我想尝试将状态管理添加到天气预报器示例中。我修改了前端 Razor Pages 应用程序来存储和检索一些状态,并在我的 docker-compose 文件添加一个 redis 容器。

事情进展不顺利。

wxui-dapr 容器正在退出显示以下消息:

time="2021-05-20T22:47:50.3179068Z" level=fatal msg="进程组件 状态存储错误:redis 存储:连接到 redis 时出错 本地主机:6379:拨 tcp 127.0.0.1:6379:连接:连接被拒绝” app_id=wxui 实例=69254f9724b0 范围=dapr.runtime type=log 版本=1.1.2

我猜测 dapr sidecar 容器没有将本地端口 6379 映射到 redis 容器。但我不知道如何测试或修复它。

这是我的 docker-compose.yml 文件,如果有用的话:

version: '3.4'

services:
  redis:
    image: "redis:alpine"
    ports:
      - "6379:6379"
    networks:
      - wx-hello-world

  wxui:
    image: ${DOCKER_REGISTRY-}wxui
    build:
      context: .
      dockerfile: WxUI/Dockerfile
    ports:
      - "51000:50001"
    networks:
      - wx-hello-world
    depends_on:
      - redis

  wxui-dapr:
    image: "daprio/daprd:latest"
    command: [ "./daprd","-app-id","wxui","-app-port","80","-components-path","/components" ]
    volumes:
      - "./components/:/components"
    depends_on:
      - wxui
    network_mode: "service:wxui"

  wxapi:
    image: ${DOCKER_REGISTRY-}wxapi
    build:
      context: .
      dockerfile: WxAPI/Dockerfile
    ports:
      - "52000:50002"
    networks:
      - wx-hello-world
  
  wxapi-dapr:
    image: "daprio/daprd:latest"
    command: [ "./daprd","wxapi","80" ]
    depends_on:
      - wxui
      - wxapi
    network_mode: "service:wxapi"

networks:
  wx-hello-world:

我可以根据需要(请求)提供其他日志或数据。

谁能帮我找出导致 wxui-dapr 容器退出的原因,以及如何修复它? 谢谢!

解决方法

所以在我有限的环境中,利用我对 docker 网络非常有限的理解,我能够让它工作。请随时提供更好的解决方案!

我最终更改了 docker-compose.yml 文件以给 redis 容器一个主机名:

version: '3.4'

services:
  redis:
    image: "redis:alpine"
    hostname: wxstate
    ports:
      - "6379:6379"
    networks:
      - wx-hello-world

然后更改 dapr statestore.yaml 组件以使用该主机名:

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: statestore
spec:
  type: state.redis
  metadata:
  - name: redisHost
    value: wxstate:6379
  - name: redisPassword
    value: ""
  - name: actorStateStore
    value: "true"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?