如何设置 dapr 和 docker compose with state management
How to set up dapr and docker compose with state management
对 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="process component
statestore error: redis store: error connecting to redis at
localhost:6379: dial tcp 127.0.0.1:6379: connect: connection refused"
app_id=wxui instance=69254f9724b0 scope=dapr.runtime type=log
ver=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", "-app-id", "wxapi", "-app-port", "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"
对 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="process component statestore error: redis store: error connecting to redis at localhost:6379: dial tcp 127.0.0.1:6379: connect: connection refused" app_id=wxui instance=69254f9724b0 scope=dapr.runtime type=log ver=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", "-app-id", "wxapi", "-app-port", "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"