在 Elastic Beanstalk 上使用 Docker 部署 .NET Core Web API

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

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,我将整个源代码与 DockerfileDockerrun.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.


我做错了什么?我如何让它工作?

所以这一切都是在 Windows 机器上开发的,即 Windows 行结尾 ,Elastic Beanstalk 似乎没有检测到这一点。这解释了为什么 Elastic Beanstalk 无法从我的 Dockerfile 中解析出 FROM <image>,因为存在不需要的乱码,因此出现错误消息 No Docker image specified....

我希望这个问题得到关注和修复!

与此同时,我正在使用 Visual Studio 插件 Line Endings Unifier,它使我能够右键单击文件并将行尾更改为我想要的任何类型。