3

Very new to dapr and docker.

I followed along the dapr getting started. The simple hello world state management example worked fine. Yes Bruce, we all know you are Batman.

So next I built the weather forecast multi-container example for .NET Core. This worked beautifully. (I named my front-end razor pages "wxui" and the back-end webapi "wxapi").

Finally, I wanted to try my hand at adding state management to the weather forecaster example. I modified the front-end Razor Pages app to store and retrieve a bit of state and added a redis container to my docker-compose file.

Things are not going well.

The wxui-dapr container is exiting with this message:

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

I'm going to guess that the dapr sidecar container is not mapping local port 6379 to the redis container. But I have no idea how to test or fix that.

Here's my docker-compose.yml file, if that's useful:

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:

I can provide other logs or data as needed (requested).

Can anyone help me figure out what is causing the wxui-dapr container to exit, and how to fix it? Thank you!

1 Answer 1

5

So in my limited environment, using my very limited understanding of docker networking, I was able to make it work. Please feel free to offer better solutions!

I ended up changing the docker-compose.yml file to give the redis container a hostname:

version: '3.4'

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

and then change the dapr statestore.yaml component to use that hostname:

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"
Sign up to request clarification or add additional context in comments.

3 Comments

Thankyou for the follow up with the solution, I have been banging my head against the desk for the past day or so
This fixed it for me too. I still don't understand why the other 10 examples I looked at did not include a hostname and supposedly worked.
This SO Answer helps explain a little: stackoverflow.com/a/64882567

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.