AWS Lambda Sam无法找到Docker。

13

我想使用以下命令在项目根文件夹中测试我的 hello world lambda 函数, 命令使用 aws-sam-cli:

sam local start-api --debug
这将在控制台中输出以下内容:
2018-07-11 16:13:15 local start-api command is called
2018-07-11 16:13:15 2 resources found in the template
2018-07-11 16:13:15 Found Serverless function with name='Hello' and CodeUri='.'
2018-07-11 16:13:15 Trying paths: ['/home/jamiro/.docker/config.json', '/home/jamiro/.dockercfg']
2018-07-11 16:13:15 No config file found
2018-07-11 16:13:15 Trying paths: ['/home/jamiro/.docker/config.json', '/home/jamiro/.dockercfg']
2018-07-11 16:13:15 No config file found
Error: Running AWS SAM projects locally requires Docker. Have you got it installed?

据我了解,我已经安装了docker,因为执行docker --version会生成以下输出:

Docker version 18.03.1-ce, build 9ee9f40

有人知道为什么sam找不到docker吗?


运行 which docker。它在哪里显示 Docker 已安装? - RyanWilcox
它返回 /usr/bin/docker - J. Leander
2
也许这个问题会对你有所帮助:https://dev59.com/C1UL5IYBdhLWcg3wI1Ip - juanlumn
1
@juanlumn 看起来问题已经解决了,谢谢!我不确定当评论回答了问题时标准的程序是什么。你会把它作为一个单独的答案发布,这样我就可以接受它吗? - J. Leander
刚刚添加了一个答案。 - juanlumn
可能是在本地运行AWS SAM项目出现错误的重复问题。 - JDC
6个回答

14
请按照以下步骤操作:
  1. 删除 ~/.docker 目录
  2. 创建 "docker" 用户组
  3. 将我的用户添加到 "docker" 用户组中
  4. 退出并重新登录
  5. 重启 "docker" 守护程序。

有关更多信息,请参阅Docker 后安装说明


1
重要的是注销并重新登录,才能使其发挥作用。我阅读了链接的说明,认为可以避免重新启动,但显然不行。 - robjwilkins

2

我曾安装一个旧版本的docker。虽然docker能够正常工作,但是sam无法正确检测到它。

原始答案:Original Answer

sam local start-api --debug

docker.errors.APIError: 400 客户端错误:请求不当(“客户端版本高于服务器版本(客户端 API 版本:1.35,服务器 API 版本:1.24)”)错误:在本地运行 AWS SAM 项目需要 Docker。您已经安装了吗?
我删除了旧版本并重新安装了 docker.io 包(在 Ubuntu 下)。然后启动了 docker 守护进程,问题解决了。
最初的回答:升级 docker 版本或降低客户端 API 版本都是解决此错误的方法。在此之前,请先确保您已安装 Docker。如果已安装 Docker,则可以尝试重启 Docker 服务并检查版本。如果仍然无法解决问题,可以尝试卸载 Docker 并重新安装。

1
如果在 Mac 上出现此问题,我能够通过在父文件夹上实施文件共享来解决此问题。 AWS SAM 需要文件共享才能运行,这会导致相同的错误。

1

此外,在Windows中,在安装任何东西之前,检查Docker本身是否运行是很有用的。最简单的方法是运行Docker桌面版,它将自动运行必要的服务。对我来说,在这之后错误消失了。 - elshev

0

我在我的M1 Mac上遇到了同样的问题,我安装了Docker桌面版4.18.0。我通过将Docker降级到版本4.15.0来解决问题。


0
我遇到了同样的问题,因为我不小心运行了这个命令:
``` sam local start-api ```
没有使用sudo。我只需要像这样输入它:
``` sudo sam local start-api ```
也许这会帮助其他人,并防止他们重新安装docker。

1
根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,帮助其他人理解这如何回答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community
1
根据目前的表述,你的回答不够清晰。请编辑以添加更多细节,以帮助他人理解如何解答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - undefined

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