您好,我正在尝试使.NET Core
服务器与Redis
数据库进行通信。该服务器在容器外部运行良好。
容器已设置好。我可以访问数据库使用主机端口映射。
但是,当我执行要求服务器调用数据库的操作时,连接会被拒绝。
dockercompose
version: '3.3'
services:
db:
image: redis:4.0.5-alpine
container_name: redis0
networks:
- redis-net
ports:
- 6381:6379 //i can acess redis from the hostmachine via 6381 but i can't acess it via 6379 from the container with the server
backend:
image: server
container_name: server0
build: ./Server
command: ["dotnet","Server.dll"]
ports:
- 9400:9300
networks:
- redis-net
environment:
- dbport=6379
depends_on:
- db
networks:
redis-net:
启动
public void ConfigureServices(IServiceCollection services) {
services.AddOptions();
services.AddMvc();
try {
var env = Environment.GetEnvironmentVariables();
var portStr = env["dbport"].ToString();
System.IO.File.AppendAllText("dock.txt",$"dbport:{portStr}");
if (!(int.TryParse(portStr,out int redisPort))) {
return;
}
var mux = new Multiplexer();
var logicalConnection = mux.OpenLink(redius.Address.Create(redisPort));
services.AddSingleton(logicalConnection);
} catch (Exception ex) {
Console.WriteLine("Could not open link, ex:" + ex.Message);
}
}
对于调试,我正在编写服务器将其扔到容器中的文件中的exception
,然后使用docker exec -it <container_id> bash
来查找它。
引发的控制器方法
public async Task<List<User>> GetUsers()
{
try
{
var usersRaw = await this.connection.HMGetAllAsync("users");
}
catch (Exception ex)
{
System.IO.File.AppendAllText(Constants.OUTPUT,ex.Message);
return null;
}
return null;
}
错误显示:connection refused for 127.0.0.1:6379
。ip
地址是否错误?基本上问题是这样的:
Redis Server
HostPort 6381 9400
ContainerPort 6379 9300
AppPort 6379 9300
我可以通过6381
从外部访问Redis,也可以通过Server
访问9400
。
服务器可以与两个外部容器之间的Redis
通信(因此不会出现专有库错误)。
无法通过Redis
从Server
访问6379
(都在network
-> redis-net
中)
答案 0 :(得分:1)
对于错误消息,似乎您正在使用29-OCT-18
中的localhost:6379
。
尝试使用server image
或http://redis0:6379
的基本网址