Mel*_*ssa 2 c# redis docker docker-compose asp.net-core
我正在使用 Docker 并尝试连接 redis 和 Web 应用程序。这是我的 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"
Run Code Online (Sandbox Code Playgroud)
这是我的 ConnectionStrings:
"ConnectionStrings": {
"redis": "localhost:6379,abortConnect=False"
},
Run Code Online (Sandbox Code Playgroud)
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"]
Run Code Online (Sandbox Code Playgroud)
在 Startup.cs 中连接到 Redis:
services.AddDistributedRedisCache(option =>
{
option.Configuration = Configuration.GetConnectionString("redis");
});
Run Code Online (Sandbox Code Playgroud)
要连接到 docker,我在 cmd 中编写下一个命令:
docker-compose build
docker-compose up
Run Code Online (Sandbox Code Playgroud)
此命令运行良好,但在我转到“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 ---
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?我不知道如何强制 ASP.NET Core 应用程序在 Docker 中看到 Redis。
有两件事你需要改变:
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"
Run Code Online (Sandbox Code Playgroud)
2:应该更新ConnectionStrings。代替 localhost 使用 redis_image 的服务名称,如下所示
"ConnectionStrings": {
"redis": "redis_image:6379,abortConnect=False"
},
Run Code Online (Sandbox Code Playgroud)
让我知道结果
| 归档时间: |
|
| 查看次数: |
2602 次 |
| 最近记录: |