Windows 在Elastic Beanstalk上使用Docker部署.NET核心Web API
我正在尝试使用Docker到Elastic Beanstalk部署一个最低限度的测试.NET核心Web API,但没有成功Windows 在Elastic Beanstalk上使用Docker部署.NET核心Web API,windows,amazon-web-services,docker,amazon-elastic-beanstalk,.net-core,Windows,Amazon Web Services,Docker,Amazon Elastic Beanstalk,.net Core,我正在尝试使用Docker到Elastic Beanstalk部署一个最低限度的测试.NET核心Web API,但没有成功 源代码 我在VisualStudio中创建了一个全新的.NET核心Web API项目,生成的示例代码保持不变。之后,我在项目的根目录中添加了一个Dockerfile,内容如下: FROM microsoft/dotnet:onbuild EXPOSE 5000 { "urls": "http://*:5000" } { "AWSEBDockerrun
源代码 我在VisualStudio中创建了一个全新的.NET核心Web API项目,生成的示例代码保持不变。之后,我在项目的根目录中添加了一个
Dockerfile
,内容如下:
FROM microsoft/dotnet:onbuild
EXPOSE 5000
{
"urls": "http://*:5000"
}
{
"AWSEBDockerrunVersion": "1"
}
之后,我在项目的根目录中创建了一个hosting.json
文件。我想将Kestrel服务器绑定到容器的所有IP。hosting.json
文件包含以下内容:
FROM microsoft/dotnet:onbuild
EXPOSE 5000
{
"urls": "http://*:5000"
}
{
"AWSEBDockerrunVersion": "1"
}
为了确保应用程序正在加载该配置文件,我将我的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();
}
所有这些在我本地的机器上都运行得很好。我已使用以下命令运行它:
docker build -t netcore .
docker run --rm -itp 5000:5000 netcore
我通过访问urlhttp://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会产生以下错误Dockerfile或Dockerrun.aws.json中未指定Docker映像。中止部署。
我做错了什么?我怎样才能让它工作呢?所以这都是在Windows机器上开发的,也就是说,Windows行结束符,而Elastic Beanstalk似乎没有检测到这一点。这就解释了为什么Elastic Beanstalk无法从我的
Dockerfile
中解析,因为存在不需要的乱码,因此出现错误消息未指定Docker映像…
我希望这一点得到注意和修复
与此同时,我正在使用Visual Studio插件,该插件使我能够右键单击文件,并将行尾更改为我想要的任何类型。再过几个小时,我仍然无法实现这一点。我确信我所做的有点不对劲,但有一件事是肯定的;错误消息完全不正确。显然有一个Docker图像指定。。。现在,如果只有消息可以指示实际的错误,那么如果您使用的是eb cli,它使用的是git钩子,那么您可以通过让“谢谢您的提示”来解决这个问题!我将对此进行调查:)