.Net Core与EC2教程中的Docker问题

我正在通过本教程尝试在EC2容器服务上安装一个简单的ASP.Net核心应用程序。 我得到的结束,但不能让我的容器启动。 当我input:

docker run 171329494690.dkr.ecr.us-west-2.amazonaws.com/ecsdemo-redisgeo:latest 

手动运行容器我得到以下错误:

  Project RedisGeo.ServiceModel (.NETStandard,Version=v1.6) was previously compiled. Skipping compilation. Project RedisGeo.ServiceInterface (.NETStandard,Version=v1.6) was previously compiled. Skipping compilation. Project RedisGeo (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation. fail: ServiceStack.Redis.RedisNativeClient[0] Could not connect to redis Instance at localhost:6379 fail: ServiceStack.Redis.RedisNativeClient[0] Could not connect to redis Instance at localhost:6379 fail: ServiceStack.Redis.RedisNativeClient[0] localhost:6379 Unhandled Exception: ServiceStack.Redis.RedisException: localhost:6379 ---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException: Connection refused 127.0.0.1:6379 at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) at System.Net.Sockets.Socket.Connect(EndPoint remoteEP) at System.Net.Sockets.Socket.Connect(IPAddress address, Int32 port) at ServiceStack.Redis.RedisNativeClient.Connect() in /opt/lib/teamcity-agent/work/8dcfdcec54d0f21a/src/ServiceStack.Redis/RedisNativeClient_Utils.cs:line 212 at ServiceStack.Redis.RedisNativeClient.AssertConnectedSocket() in /opt/lib/teamcity-agent/work/8dcfdcec54d0f21a/src/ServiceStack.Redis/RedisNativeClient_Utils.cs:line 257 --- End of inner exception stack trace --- at ServiceStack.Redis.RedisNativeClient.AssertConnectedSocket() in /opt/lib/teamcity-agent/work/8dcfdcec54d0f21a/src/ServiceStack.Redis/RedisNativeClient_Utils.cs:line 273 at ServiceStack.Redis.RedisNativeClient.AssertServerVersionNumber() in /opt/lib/teamcity-agent/work/8dcfdcec54d0f21a/src/ServiceStack.Redis/RedisNativeClient_Utils.cs:line 47 at ServiceStack.Redis.RedisClient.GetServerRole() in /opt/lib/teamcity-agent/work/8dcfdcec54d0f21a/src/ServiceStack.Redis/RedisClient.cs:line 1092 at ServiceStack.Redis.RedisResolver.CreateRedisClient(RedisEndpoint config, Boolean master) in /opt/lib/teamcity-agent/work/8dcfdcec54d0f21a/src/ServiceStack.Redis/RedisResolver.cs:line 84 at ServiceStack.Redis.RedisManagerPool.GetClient() in /opt/lib/teamcity-agent/work/8dcfdcec54d0f21a/src/ServiceStack.Redis/RedisManagerPool.cs:line 194 at RedisGeo.AppHost.ImportCountry(IRedisClientsManager redisManager, String countryCode) in /app/RedisGeo/AppHost.cs:line 35 at RedisGeo.AppHost.Configure(Container container) in /app/RedisGeo/AppHost.cs:line 30 at ServiceStack.ServiceStackHost.Init() in /opt/lib/teamcity-agent/work/d09206570215629/src/ServiceStack/ServiceStackHost.cs:line 189 at ServiceStack.NetCoreAppHostExtensions.UseServiceStack(IApplicationBuilder app, AppHostBase appHost) in /opt/lib/teamcity-agent/work/d09206570215629/src/ServiceStack/AppHostBase.NetCore.cs:line 178 at RedisGeo.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) in /app/RedisGeo/Startup.cs:line 27 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app) at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication() at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build() at RedisGeo.Program.Main(String[] args) in /app/RedisGeo/Program.cs:line 14 

任何帮助将不胜感激,我是AWS的新手,所以请让我知道,如果我可以提供任何更多的信息。

这是我的docker文件:

 FROM microsoft/dotnet:1.1-sdk-projectjson COPY src /app WORKDIR /app RUN ["dotnet", "restore"] WORKDIR /app/RedisGeo RUN ["dotnet", "build"] EXPOSE 5000/tcp ENV ASPNETCORE_URLS https://*:5000 ENTRYPOINT ["dotnet", "run", "--server.urls", "http://*:5000"] 

当我运行以下命令docker ps --format "{{.ID}}: {{.Status}} {{.Command}} {{.Ports}}"当前正在运行的docker容器

 8285b5479401: Up 22 hours "/agent" ba110a5f14ef: Up 46 hours "/app/docker-entrypoi" 0.0.0.0:80->80/tcp, 443/tcp 

ecsdemo-redisgeo任务容器定义

在这里输入图像说明

在这里输入图像说明

 Connection refused 127.0.0.1:6379 

此错误表示127.0.0.1:6379上没有可用的Redis服务器实例。

确保你的task-definition.json与ECS task-definition.json相同,其中包含${IMAGE_NAME}-redis容器定义,它将告诉ECS同时在你的App中部署一个Redis服务器的Docker实例。 您可以在redis-geo / scripts中find用于部署redis-geo App的脚本 。

redis服务器实例的主机名可以从REDIS_HOST环境variables中访问,您应该在应用程序中使用它,例如:

 container.Register<IRedisClientsManager>(c => new RedisManagerPool(AppSettings.Get("REDIS_HOST", defaultValue:"localhost"))); 

当我尝试开发教程时遇到了同样的问题,经过几次尝试和失败之后,我终于通过从我的task-definition.json文件中删除以下条目来设法使其工作。

 { "name": "SERVICESTACK_LICENSE", "value": "${SERVICESTACK_LICENSE}" }, 

它失败的原因是因为我在travis中没有这个入口,所以我想它在这之后不能读取REDIS_HOST。