在 Elastic Beanstalk 上使用 Docker 部署 .NET Core Web API
Posted
技术标签:
【中文标题】在 Elastic Beanstalk 上使用 Docker 部署 .NET Core Web API【英文标题】:Deploying a .NET Core Web API using Docker on Elastic Beanstalk 【发布时间】:2017-01-18 11:09:12 【问题描述】:我正在尝试使用 Docker 将最低限度的测试 .NET Core Web API 部署到 Elastic Beanstalk,但没有任何成功。
源代码
我在 Visual Studio 中创建了一个全新的 .NET Core Web API 项目,并且没有修改生成的示例代码。之后我在项目的根目录中添加了Dockerfile
,内容如下:
FROM microsoft/dotnet:onbuild
EXPOSE 5000
For your curiosity, here's a link to the .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();
If needed, here's the documentation on the hosting.json
file.
最后,即使我不需要它according to AWS documentation,我在项目的根目录中创建了一个Dockerrun.aws.json
,其内容如下:
"AWSEBDockerrunVersion": "1"
这一切在我的本地机器上运行得很好。我使用以下命令运行它:
docker build -t netcore .
docker run --rm -itp 5000:5000 netcore
我已通过在浏览器中访问 url http://localhost:5000/api/values
来验证它是否有效。它产生了预期的结果!
AWS
现在为了将其部署到 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
但是,将这个源包部署到 Elastic Beanstalk,使用单个 Docker 容器单实例环境,会产生以下错误 No Docker image specified in either Dockerfile or Dockerrun.aws.json. Abort deployment.
我做错了什么?我该如何让它发挥作用?
【问题讨论】:
几个小时后,我仍然无法让它工作。我确信我所做的事情有问题,但有一件事是肯定的;错误消息完全不正确。显然指定了一个 Docker 映像......现在,如果只有消息可以指示实际错误。 【参考方案1】:所以这都是在 Windows 机器上开发的,即 Windows 行尾,似乎 Elastic Beanstalk 没有检测到这一点。这就解释了为什么 Elastic Beanstalk 无法从我的 Dockerfile
中解析出 FROM <image>
,因为存在不需要的乱码,因此会出现错误消息 No Docker image specified...
。
我希望这会引起注意并修复!
与此同时,我正在使用 Visual Studio 插件 Line Endings Unifier,它使我能够右键单击文件并将行尾更改为我想要的任何类型。
【讨论】:
如果您使用的是 eb cli,它使用 git 挂钩,您可以通过让 git control the line endings 来解决这个问题 感谢您的提示!我会调查的:)以上是关于在 Elastic Beanstalk 上使用 Docker 部署 .NET Core Web API的主要内容,如果未能解决你的问题,请参考以下文章
Amazon Elastic Beanstalk ebextension
在 AWS Elastic Beanstalk 上部署 Laravel 8 后得到 404
如何使用 Elastic beanstalk 和 Dockerrun.aws.json 正确部署到 AWS?
Elastic Beanstalk 的 Hostmanager 无法启动 Apache,EBS 连接缓慢