[英]Deploying a .NET Core Web API using Docker on Elastic Beanstalk
我正在尝试使用Docker将最初的.NET Core Web API部署到Elastic Beanstalk,但没有任何成功。
我在Visual Studio中创建了一个全新的.NET Core Web API项目,并保持生成的示例代码不变。 之后,我将Dockerfile
添加到项目的根目录,其中包含以下内容:
FROM microsoft/dotnet:onbuild
EXPOSE 5000
为了您的好奇心,这里是.NET docker repo的链接 。
之后,我在项目的根目录中创建了一个hosting.json
文件。 我想将Kestrel服务器绑定到容器的所有IP。 hosting.json
文件具有以下内容:
{
"urls": "http://*:5000"
}
为了确保应用程序正在加载该配置文件,我将我的Main
方法更改为:
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hosting.json", optional: false)
.Build();
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseConfiguration(config)
.Build();
host.Run();
}
最后,即使我根据AWS文档不需要它,我在项目的根目录中创建了一个Dockerrun.aws.json
,其中包含以下内容:
{
"AWSEBDockerrunVersion": "1"
}
所有这些在我的本地机器上运行得很好。 我使用以下命令运行它:
docker build -t netcore .
docker run --rm -itp 5000:5000 netcore
我已经通过在我的浏览器中访问url http://localhost:5000/api/values
来验证它的工作原理。 它产生了预期的结果!
现在,为了将它部署到Elastic Beanstalk,我已经使用Dockerfile
和Dockerrun.aws.json
存档了整个源代码。 ZIP文件中的根看起来像这样:
Controllers/
Properties/
wwwroot/
appsettings.json
Dockerfile
Dockerrun.aws.json
hosting.json
Program.cs
project.json
project.json.lock
Startup.cs
web.config
但是, 使用单个Docker容器单实例环境将此源包部署到Elastic Beanstalk会产生以下错误No Docker image specified in either Dockerfile or Dockerrun.aws.json. Abort deployment.
No Docker image specified in either Dockerfile or Dockerrun.aws.json. Abort deployment.
我究竟做错了什么? 我如何让它工作?
所以这一切都是在Windows机器上开发的,即Windows系列结尾 ,似乎Elastic Beanstalk没有检测到它。 这就解释了为什么Elastic Beanstalk无法解析我的Dockerfile
的FROM <image>
,因为存在不必要的乱码,因此错误消息No Docker image specified...
我希望这会被注意到并修复!
与此同时,我正在使用Visual Studio插件Line Endings Unifier ,这使我能够右键单击该文件并将行结尾更改为我想要的任何类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.