如何代理来自在 docker 容器中运行的 dotnet core 应用程序的每个请求

coo*_*e89 5 c# proxy docker .net-core

我正在努力从在 docker 容器代理 http 请求上运行的 Web api 获取 http 调用。我已使用 bash 通过代理成功到达所需的端点

docker exec -i -t 665b4a1e17b6 /bin/bash 
Run Code Online (Sandbox Code Playgroud)

http_proxy=http://exampleProxy:7777 curl -s http://endpoint
Run Code Online (Sandbox Code Playgroud)

现在我想从在同一容器上运行的应用程序内重新创建它

我已经尝试过以下方法:

  1. dotnet 核心代理

        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();
    
        app.UseMvc().RunProxy(new ProxyOptions
        {
            Scheme = "http",
            Host = "example",
            Port = "7777"
        });
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建容器时设置 http_proxy 环境变量

        export http_proxy=http://example:7777
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用 HttpClientHandler

    var handler = new HttpClientHandler
    {
        Proxy = new WebProxy("http://example:777)
    };
    var client = new HttpClient(handler);
    etc....
    
    Run Code Online (Sandbox Code Playgroud)

有人能想到其他设置代理的方法吗?或者关于如何调试这个的任何建议?

小智 0

我不是 dotnet 专家,也不知道你的应用程序是如何运行的,所以我只是假设你像普通的 nginx 一样运行你的应用程序。我建议您像这样运行您的应用程序sh -c your_app,这意味着您可以将 docker cmd 设置为sh -c your_app.

希望这能解决您的问题。

顺便说一句,这个问题与 kubernetes 无关,您可能有错误的标签;)