Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 在未登录的AWS EC2实例上部署docker容器_Amazon Web Services_Docker_Amazon Ec2 - Fatal编程技术网

Amazon web services 在未登录的AWS EC2实例上部署docker容器

Amazon web services 在未登录的AWS EC2实例上部署docker容器,amazon-web-services,docker,amazon-ec2,Amazon Web Services,Docker,Amazon Ec2,我是一个微服务的初学者,在AWS最微小的痛苦的事情上花了好几个小时,如果我怀疑下一步很小,但如果不是这样的话,我可能需要好几个小时才能完成,我将非常感谢任何专家的建议 所以我部署了一个nano实例,然后ssh。实际上必须重做它来修复安全组,但无论如何,它最终还是成功了。使用scp按照说明将我的docker图像放在那里,总之docker save在本地对图像进行.tar处理,并docker load在等待scp上传15分钟后将其远程放入系统。然后在命令提示下键入docker run 在过去的3天里

我是一个微服务的初学者,在AWS最微小的痛苦的事情上花了好几个小时,如果我怀疑下一步很小,但如果不是这样的话,我可能需要好几个小时才能完成,我将非常感谢任何专家的建议

所以我部署了一个nano实例,然后
ssh
。实际上必须重做它来修复安全组,但无论如何,它最终还是成功了。使用
scp
按照说明将我的docker图像放在那里,总之
docker save
在本地对图像进行.tar处理,并
docker load
在等待
scp
上传15分钟后将其远程放入系统。然后在命令提示下键入docker run

在过去的3天里,我们曾两次尝试在AWS控制台上使用这些(linux)终端措施,但都失败了,因为它上传了,但没有运行

现在,当我键入
docker run my_image
时,它运行得非常好,我可以在那里用
docker image
docker ps-a
命令看到它


但是AWS实例上的命令提示符在运行时正忙。。如果我关上终端窗口,它肯定会死。现在我知道它在那里工作,我如何“部署”它(让它运行并继续运行一个月或直到另行通知)?我认为它可能需要一个名为“任务定义”的json文件,但根本不知道下一步该怎么做。此任务定义和所有剩余任务是否可以在登录到实例的终端内完成?

我发现有一些问题:

  • 您应该使用Docker注册表服务,而不是SCPing映像。在AWS上有EC2容器注册表,或者您也可以使用Docker Hub。这将使将图像放到实例上变得更容易

  • 我不知道你为什么不能用控制台启动你的容器。我想您正在使用AWS ECS?您可以尝试帮助您找出任务未运行的原因

  • 这听起来像是在前台(连接到shell)而不是在后台启动docker容器。尝试添加到docker run命令以在后台运行容器,以便关闭SSH会话。请注意,如果容器内的应用程序进程崩溃,容器仍将停止。这是使用编排器(如AWS ECS)定义服务的原因之一,该服务将尝试始终运行一定数量的任务。ECS还帮助将docker容器放到实例上,并在后台自动为您启动


来自@nathanpeck的-d标志答案正是您在上一段描述中想要的答案谢谢!
-d
标志起作用。可以在终端启动它,并将其置于背景而不是前景。然后我注销,关闭终端,关闭AWS控制台,服务仍然运行良好,必须重新登录并使用
docker stop
再次停止。“orchestrator AWS ECS”是否可以从该实例的终端内部执行?否则听起来可能不够健壮,如果进程崩溃,容器将停止。AWS ECS使用在实例上运行的代理从外部控制实例。您不必手动重新启动任何东西,因为AWS ECS将自动重新启动您的容器。它还允许您对AWS ECS进行简单的API调用,并将更新您的容器。当您有多个实例时,真正的力量就来了,因为AWS ECS将为您控制整个实例群,并代表您启动和停止容器,以响应高级指示,如“启动分布在可用性区域的此容器的五个并保持其运行”谢谢,好消息是它已经完美运行了大约一周了,由ECS管理(我学会了如何使用)不再登录实例来管理它或在这里输入任何命令。您说过对AWS ECS进行一个简单的API调用,每当我更新(重新推送)我的容器时,它都会更新您的容器,并更新任务和集群。也许这不是必需的,请怀疑重新推送容器可能会允许它继续运行,而无需登录AWS或触摸任务或集群。