我正在尝试使用Docker将最基本的.NET Core Web API部署到弹性Beanstalk上进行测试,但一直没有成功。
为了确保应用程序加载配置文件,我更改了我的
我已经验证了它的可用性,通过在浏览器中访问URL
然而,将此源代码包部署到 Elastic Beanstalk 时,使用单个 Docker 容器单个实例环境会产生以下错误:
源代码
我在Visual Studio中创建了一个全新的.NET Core Web API项目,并保留了生成的示例代码。之后,我在项目的根目录添加了一个Dockerfile
文件,其内容如下:
FROM microsoft/dotnet:onbuild
EXPOSE 5000
随后我在项目根目录中创建了一个名为 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
。它产生了预期的结果!
AWS
现在,为了将其部署到弹性 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.
我做错了什么?如何让它工作?