好的,我创建了空的RC2项目并使用VS 2015本地运行它可以工作。
现在我想使用docker将它部署到linux服务器 - 所以我的dockerfile应该怎么样?我一直关注these instructions,这就是我最终的结果:
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是服务器地址)。
我做错了吗?
答案 0 :(得分:2)
您还可以在Dockerfile级别指定Urls(如果要重用Container,则更好)。这是完整的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-in-docker/
答案 1 :(得分: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