繁体   English   中英

无法连接到运行Kestrel服务器的本地Docker

[英]Cannot connect to local Docker running Kestrel server

我有一个Kestrel服务器,它将Hello World返回到任何HTTP请求。

static class Program
{
    static void Main(string[] args)
    {
        var webHostBuilder = WebHost.CreateDefaultBuilder(args)
                                    .UseSetting("applicationName", "Hello World")
                                    .Configure(builder => {
                                        builder.Run(async context =>
                                                {
                                                    var textBytes = UTF8.GetBytes("Hello World!");
                                                    await context.Response.Body.WriteAsync(textBytes, 0, textBytes.Length, default (CancellationToken));
                                                });
                                        })
                                        .UseUrls("http://+:8000");
        var webHost = webHostBuilder.Build();
        webHost.Run();
    }
}

我已将构建程序集添加到Docker映像,并使用DockerFile对其进行了DockerFile

FROM microsoft/dotnet
WORKDIR /app
ADD /application /app
EXPOSE 8000
ENTRYPOINT [ "dotnet", "hello-world-server.dll" ]

我已经用它运行了:

>docker run hello-world-server --publish-list 8000:8000

当我向http://localhost:8000发送请求时,我得到了502返回。

我正在Windows 10上使用Windows容器。


以下是构建和运行的完整输出:

C:\...\hello-world-server-docker>docker build -t hello-world-server .
Sending build context to Docker daemon  84.99kB
Step 1/5 : FROM microsoft/dotnet
 ---> d08db1d19023
Step 2/5 : WORKDIR /app
Removing intermediate container 873dea47b78b
 ---> de4b80a52d54
Step 3/5 : ADD /application /app
 ---> ba75fe5b5efc
Step 4/5 : EXPOSE 8000
 ---> Running in 1ac9c977c9b4
Removing intermediate container 1ac9c977c9b4
 ---> 22cb3848d762
Step 5/5 : ENTRYPOINT [ "dotnet", "hello-world-server.dll" ]
 ---> Running in 17f3b01f6ed0
Removing intermediate container 17f3b01f6ed0
 ---> 82c7e3aadfc2
Successfully built 82c7e3aadfc2
Successfully tagged hello-world-server:latest

C:\...\hello-world-server-docker>docker run hello-world-server --publish-list 8000:8000
Hosting environment: Production
Content root path: C:\app
Now listening on: http://[::]:8000
Application started. Press Ctrl+C to shut down.

当向localhost:8000发出请求时,Kestrel在控制台上没有进一步的输出,而通常会有一个正常的控制台应用程序。


我也尝试过使用>docker run hello-world-server --publish 8000:8000运行它。

我认为问题出在docker run命令中。 --publish-list 8000:8000现在是容器入口点的参数。

运行容器并公开端口的命令是:

docker run -p 8000:8000 hello-world-server

必须将docker run每个命令行选项放在映像名称之前 映像名称之后的所有内容都是容器本身的命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM