Здравствуйте, я пытаюсь заставить сервер .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
Я могу получить доступ к Redis снаружи через 6381
, а также могу получить доступ Server
через 9400
.Сервер может связываться с Redis
обоими внешними контейнерами (поэтому нет ошибки в собственной библиотеке).
Невозможно получить доступ к Redis
из Server
через 6379
(оба находятся в network
-> redis-net
)