无法访问我的Docker DotNet核心网站

时间:2016-07-02 19:30:13

标签: .net docker dockerfile

我已陷入死胡同。 我有一个dotnet核心1.0.0应用程序我正在尝试启动和运行。 它从linux和windows工作得很好。 现在我想把它变成码头工人。 我制作了这个泊坞文件:

FROM microsoft/dotnet:1.0.0-preview2-sdk

COPY . /app
WORKDIR /app/app
RUN ["dotnet", "restore"]

ENTRYPOINT ["dotnet", "run"] 

它只是将代码复制到docker映像中的app文件夹并恢复依赖关系,然后运行它。当我尝试运行它时,它会启动,因为一切正常,打印的内容与Windows或Linux启动时相同。

Docker Console

运行项目的命令:

docker run --name dotNetWeb -p 8080:8080 kiksen1987/dotnetcore

代码链接: https://github.com/kiksen1987/dotnetcore

链接到Docker镜像: https://hub.docker.com/r/kiksen1987/dotnetcore/

我真的不知道出了什么问题。我或多或少采用了与99%的其他项目相同的方法。

任何改善这个问题的反馈都会很好:)

3 个答案:

答案 0 :(得分:12)

最后。

我发现了这篇博文:http://dotnetliberty.com/index.php/2015/11/26/asp-net-5-on-aws-ec2-container-service-in-10-steps/

尽管它使用旧版本的dotnet核心,但我有一个重要的观点;

  

请注意,我已经为dnx web命令提供了一个额外的参数,告诉它在0.0.0.0(而不是默认的localhost)上提供服务。这将允许我们的Web应用程序处理来自Docker提供的端口转发的请求,默认为0.0.0.0。

这非常重要。

解决方案:

var host = new WebHostBuilder()
            .UseKestrel()
            .UseStartup<Startup>()
            .UseUrls("http://0.0.0.0:5000")
            .Build();

旧代码:

var host = new WebHostBuilder()
            .UseKestrel()
            .UseStartup<Startup>()
            .UseUrls("http://localhost:5000")
            .Build();

这令人沮丧,因为它似乎在Linux和windows和应用程序中在Docker中启动时完美,但从未得到任何请求。 希望这有助于其他一些可怜的灵魂:)

答案 1 :(得分:1)

对于较新的.NET Core框架(例如此刻的3.1),此设置位于launchSettings.json

"commandName": "Project",
  "launchBrowser": true,
  "applicationUrl": "https://localhost:5001;http://localhost:5000",
  "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"

答案 2 :(得分:0)

您可以在此处找到一些有用的信息,用于使用ASP.NET Core和Docker构建自定义映像:https://hahoangv.wordpress.com/2016/05/23/asp-net-core-run-in-docker/

Dockerfile:

FROM microsoft/dotnet:1.0.0-preview2-sdk

# Set environment variables
ENV ASPNETCORE_URLS="http://*:5000"
ENV ASPNETCORE_ENVIRONMENT="Development"

# Copy files to app directory
COPY . /app

# Set working directory
WORKDIR /app

# Restore NuGet packages
RUN ["dotnet", "restore"]

# Open up port
EXPOSE 5000

# Run the app
ENTRYPOINT ["dotnet", "run"]

和Program.cs文件:

public static void Main(string[] args)
        {
            // Get environment variables
            var config = new ConfigurationBuilder()
                .AddEnvironmentVariables(&quot;&quot;)
                .Build();
            // You need to add these lines for accessing outside of Docker
            var url = config["ASPNETCORE_URLS"] ?? "http://*:5000";
            var env = config["ASPNETCORE_ENVIRONMENT"] ?? "Development";

            var host = new WebHostBuilder()
                .UseKestrel()
                .UseUrls(url)
                .UseEnvironment(env)
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }

希望这有帮助!