Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.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 lambda调用docker run吗_Amazon Web Services_Docker_Aws Lambda_Amazon Ecs - Fatal编程技术网

Amazon web services 可以直接从AWS lambda调用docker run吗

Amazon web services 可以直接从AWS lambda调用docker run吗,amazon-web-services,docker,aws-lambda,amazon-ecs,Amazon Web Services,Docker,Aws Lambda,Amazon Ecs,我有一个Java独立应用程序,我已经将其停靠。每次将对象放入S3存储时,我都要运行这个docker。方法是通过AWS批处理来实现,我正在努力避免 有没有一种简单直接的方法可以从lambda调用docker run?是和否 您不能执行docker run在Lambda调用的上下文中运行容器。但您可以在ECS上触发一个要执行的任务。要使其正常工作,您需要在ECS上设置集群,这意味着您需要至少支付一个EC2实例的费用。因此,最好不要使用Docker,但我对您的应用程序了解太少,无法判断这一点 有很多关

我有一个Java独立应用程序,我已经将其停靠。每次将对象放入S3存储时,我都要运行这个docker。方法是通过AWS批处理来实现,我正在努力避免

有没有一种简单直接的方法可以从lambda调用docker run?

是和否

您不能执行
docker run
在Lambda调用的上下文中运行容器。但您可以在ECS上触发一个要执行的任务。要使其正常工作,您需要在ECS上设置集群,这意味着您需要至少支付一个EC2实例的费用。因此,最好不要使用Docker,但我对您的应用程序了解太少,无法判断这一点

有很多关于如何连接S3、Lambda和ECS的文章。下面是亚马逊的一篇非常深入的文章,您可能会感兴趣:

如果您正在寻找代码,则此存储库将实现上述文章中讨论的内容:

下面是一个片段,我们在Lambda函数(Python)中使用它从Lambda运行Docker容器:

result = boto3.client('ecs').run_task(
    cluster=cluster,
    taskDefinition=task_definition,
    overrides=overrides,
    count=1,
    startedBy='lambda'
)
我们传入要在其上运行容器的
集群的名称,以及定义要运行哪个容器、它需要的资源等的任务定义<代码>覆盖
是一个字典/映射,其中包含要在任务定义中覆盖的设置,我们使用它指定要运行的命令(即
docker run
的参数)。这使我们能够使用相同的Lambda函数在ECS上运行许多不同的作业

希望这能给你指明正确的方向。

是的,试试看

Udocker是一个用Python编写的简单工具,它有一组最小的依赖项,因此可以在广泛的Linux系统中执行

udocker不使用docker,也不需要安装它

udocker通过在提取的容器上提供类似chroot的环境来“执行”容器。当前的实现使用PRoot来模拟chroot,而不需要特权

例子

从docker hub中提取并列出提取的图像

udocker pull  fedora
从拉取的图像创建容器并运行它

udocker create --name=myfed  fedora
udocker run  myfed  cat /etc/redhat-release
而且检查也很好

因为:
在Lambda中,唯一允许您编写的地方是/tmp。但是默认情况下,udocker将尝试写入homedir。还有其他的东西

是的。可以使用以下命令运行存储在AWS Lambda内Docker Hub中的Docker图像中的容器

例如,您可以在Docker Hub中创建一个Lambda函数来执行ubuntu:16.04图像中的容器,如下所示:

scar init ubuntu:16.04
然后,每次调用函数时,您都可以在该容器中运行命令或shell脚本:

scar run scar-ubuntu-16-04 whoami
SCAR: Request Id: ed5e9f09-ce0c-11e7-8375-6fc6859242f0
Log group name: /aws/lambda/scar-ubuntu-16-04
Log stream name: 2017/11/20/[$LATEST]7e53ed01e54a451494832e21ea933fca
---------------------------------------------------------------------------
sbx_user1059
您可以使用存储在Docker Hub中的自己的Docker图像。有些限制适用,但可以有效地用于在AWS Lambda上运行通用应用程序。它还具有一个用于文件处理事件驱动应用程序的编程模型。它在引擎盖下使用