2

好的,我创建了空的 RC2 项目并使用 VS 2015 在本地运行它可以工作。

现在我想使用 docker 将它部署到 linux 服务器 - 那么我的 dockerfile 应该是什么样子呢?我一直在遵循这些说明,这就是我最终得到的结果:

FROM microsoft/dotnet:1.0.0-preview1

COPY . /app
WORKDIR /app

RUN dotnet restore

EXPOSE 5004
ENTRYPOINT dotnet run

然后我将我的应用程序构建为映像: docker build -t my_app 。

并使用: docker run -t -p 8080:5004 my_app

之后,我得到了图像正在运行的信息,并且它正在监听 localhost:5000。不幸的是,我一直在尝试使用 xxxx:5000、xxxx:5004 和 xxxx:8080 连接到这个服务器,但这些地址都不起作用(xxxx 是服务器地址)。

难道我做错了什么?

4

2 回答 2

2

您还可以在 Dockerfile 级别指定 Urls(如果您想重用容器则更好)。这是完整的 Dockerfile:

FROM microsoft/dotnet

RUN printf "deb http://ftp.us.debian.org/debian jessie main\n" >> /etc/apt/sources.list

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

EXPOSE 5000/tcp
ENTRYPOINT ["dotnet", "run", "--server.urls=http://0.0.0.0:5000"]

您还需要修改 Program.cs 文件以从主 args 读取配置:

    public static void Main(string[] args)
    {
        var config = new ConfigurationBuilder()
            .AddCommandLine(args)
            .AddEnvironmentVariables(prefix: "ASPNETCORE_")
            .Build();

        var host = new WebHostBuilder()
            .UseConfiguration(config)
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }

您在这篇博文中有分步教程以及原因: https ://www.sesispla.net/blog/language/en/2016/05/running-asp-net-core-1-0-rc2-在码头/

于 2016-05-31T22:14:03.030 回答
1

您可以使用UseUrls()扩展方法告诉 kestrel 监听哪个端口,如下所示:

(这通常在Program.Main()我的入口点方法中使用)

var host = new WebHostBuilder()
    .UseKestrel()
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseUrls("http://0.0.0.0:5004")
    .Build();

host.Run();

在这种情况下,您将像这样运行 docker 映像:

$ docker run -d -p 8080:5004 my_app

我选择了-d作为守护进程运行的选项。只需确保 Dockerfile 中的 EXPOSED 端口与UseUrls. 有关这方面的完整示例,请随时查看我的 github 示例项目:https ://github.com/mw007/adventure-works

于 2016-05-27T21:17:34.843 回答