.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
もアクセスできます。サーバーは両方の外部コンテナーと通信できます (したがって、独自のライブラリの障害はありません)。viaから
アクセスできません(どちらも->にあります)Server
9400
Redis
Redis
Server
6379
network
redis-net