0

.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から アクセスできません(どちらも->にあります)Server9400Redis
RedisServer6379networkredis-net

4

1 に答える 1