我已陷入死胡同。 我有一个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 run --name dotNetWeb -p 8080:8080 kiksen1987/dotnetcore
代码链接: https://github.com/kiksen1987/dotnetcore
链接到Docker镜像: https://hub.docker.com/r/kiksen1987/dotnetcore/
我真的不知道出了什么问题。我或多或少采用了与99%的其他项目相同的方法。
任何改善这个问题的反馈都会很好:)
答案 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("")
.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();
}
希望这有帮助!