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

10
我正在尝试使用Docker将最基本的.NET Core Web API部署到弹性Beanstalk上进行测试,但一直没有成功。

源代码

我在Visual Studio中创建了一个全新的.NET Core Web API项目,并保留了生成的示例代码。之后,我在项目的根目录添加了一个Dockerfile文件,其内容如下:

FROM microsoft/dotnet:onbuild

EXPOSE 5000

这是 .NET docker 仓库的链接,供您参考。

随后我在项目根目录中创建了一个名为 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();
}

如果需要,这里是hosting.json文件的文档

最后,虽然根据AWS文档我不需要它(链接),但我在项目的根目录中创建了一个Dockerrun.aws.json文件,其内容如下:

{
    "AWSEBDockerrunVersion": "1"
}

这一切在我的本地机器上都可以正常运行。我使用以下命令运行它:

docker build -t netcore .
docker run --rm -itp 5000:5000 netcore

我已经验证了它的可用性,通过在浏览器中访问URL http://localhost:5000/api/values。它产生了预期的结果!

AWS

现在,为了将其部署到弹性 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.

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


再过几个小时,我仍然无法让它正常工作。我确信我所做的某些事情是错误的,但有一件事是确定的:错误信息完全不正确。显然指定了一个Docker镜像...现在只要消息能指示实际错误就好了。 - Niklas Ekman
1个回答

7
所以这个项目是在Windows机器上开发的,即使用了Windows行结尾,而Elastic Beanstalk似乎没有检测到。这就解释了为什么Elastic Beanstalk无法从我的中解析FROM <image>,因为有不必要的无用字符,因此会出现错误消息No Docker image specified...
我希望这能被注意并得到修复!
与此同时,我正在使用Visual Studio插件Line Endings Unifier,它使我可以右键单击文件并将行结束符更改为任何我想要的类型。

如果您正在使用eb cli,则它会使用git hooks。您可以通过让git控制行尾来解决这个问题。请参考此链接:https://help.github.com/articles/dealing-with-line-endings/ - Marc Young
谢谢你的建议!我会去研究一下 :) - Niklas Ekman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接