尽管位于同一网络中,但仍无法使容器进行通信

时间:2018-12-12 15:51:59

标签: asp.net-core redis docker-compose docker-network

您好,我正在尝试使.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:6379ip地址是否错误?基本上问题是这样的:

                Redis    Server
HostPort        6381     9400
ContainerPort   6379     9300
AppPort         6379     9300

我可以通过6381从外部访问Redis,也可以通过Server访问9400。 服务器可以与两个外部容器之间的Redis通信(因此不会出现专有库错误)。
无法通过RedisServer访问6379(都在network-> redis-net中)

1 个答案:

答案 0 :(得分:1)

对于错误消息,似乎您正在使用29-OCT-18中的localhost:6379

尝试使用server imagehttp://redis0:6379的基本网址