Как совместить приложение ASP.NET Core и Redis? - PullRequest
0 голосов
/ 12 февраля 2019

Я работаю с Docker и пытаюсь подключить Redis и веб-приложение.Это мой файл docker-compose:

version: '3.7'

services:  
  web:
    image: redistest:latest
    depends_on:
      - "redis_image"
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "9901:80"

  redis_image:
    image: redis
    container_name: cache
    ports:
      - "6379:6379"

Это мои ConnectionStrings:

"ConnectionStrings": {
    "redis": "localhost:6379,abortConnect=False"
  },

Dockerfile выглядит следующим образом:

FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app
EXPOSE 80

COPY *.csproj ./
RUN dotnet restore RedisTest.csproj

COPY . ./
RUN dotnet publish RedisTest.csproj -c Release -o out

FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "RedisTest.dll"]

Подключение к Redis при запуске.cs: ​​

services.AddDistributedRedisCache(option =>
{
    option.Configuration = Configuration.GetConnectionString("redis");
}); 

Для подключения к докеру я пишу в cmd следующие команды:

docker-compose build
docker-compose up

Эти команды работают хорошо, но после перехода на "localhost: 9901" я получаюследующие ошибки в консоли

web_1          | fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
web_1          |       An unhandled exception has occurred while executing the request.
web_1          | StackExchange.Redis.RedisConnectionException: No connection is available to service this operation: EVAL; SocketFailure on localhost:6379/Subscription, origin: Error, input-buffer: 0, outstanding: 0, last-read: 0s ago, last-write: 0s ago, unanswered-write: 1291s ago, keep-alive: 60s, pending: 0, state: Connecting, last-heartbeat: never, last-mbeat: -1s ago, global: 0s ago ---> StackExchange.Redis.RedisConnectionException: SocketFailure on localhost:6379/Subscription, origin: Error, input-buffer: 0, outstanding: 0, last-read: 0s ago, last-write: 0s ago, unanswered-write: 1291s ago, keep-alive: 60s, pending: 0, state: Connecting, last-heartbeat: never, last-mbeat: -1s ago, global: 0s ago
web_1          |    --- End of inner exception stack trace ---

web_1          | fail: Microsoft.AspNetCore.Server.Kestrel[13]
web_1          |       Connection id "0HLKGR00VUQLM", Request id "0HLKGR00VUQLM:00000001": An unhandled exception was thrown by the application.
web_1          | StackExchange.Redis.RedisConnectionException: No connection is available to service this operation: EVAL; SocketFailure on localhost:6379/Subscription, origin: Error, input-buffer: 0, outstanding: 0, last-read: 0s ago, last-write: 0s ago, unanswered-write: 1291s ago, keep-alive: 60s, pending: 0, state: Connecting, last-heartbeat: never, last-mbeat: -1s ago, global: 0s ago ---> StackExchange.Redis.RedisConnectionException: SocketFailure on localhost:6379/Subscription, origin: Error, input-buffer: 0, outstanding: 0, last-read: 0s ago, last-write: 0s ago, unanswered-write: 1291s ago, keep-alive: 60s, pending: 0, state: Connecting, last-heartbeat: never, last-mbeat: -1s ago, global: 0s ago
web_1          |    --- End of inner exception stack trace ---

Как я могу исправить эту проблему?Я не знаю, как заставить приложение ASP.NET Core увидеть Redis в Docker.

1 Ответ

0 голосов
/ 12 февраля 2019

Необходимо изменить 2 вещи:

1: файл Docker-compose должен быть обновлен и должен содержать ссылки для связи с контейнером.

version: '3.7'

services:  
  web:
    image: redistest:latest
    depends_on:
      - "redis_image"
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "9901:80"
    links:
      - "redis_image"

  redis_image:
    image: redis
    container_name: cache
    ports:
      - "6379:6379"

2: ConnectionStringsдолжно быть обновлено.Вместо localhost используйте имя службы redis_image, как показано ниже

"ConnectionStrings": {
    "redis": "redis_image:6379,abortConnect=False"
  },

Дайте мне знать результаты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...