在 AWS Lambda 上的 docker 容器内运行 Docker 命令时排除“fork/exec /usr/bin/ssh:不允许操作”的故障

问题描述 投票:0回答:0

我有一个 Docker 镜像,用作构建服务器来为我的 Web 应用程序构建 Docker 镜像。

在 Docker 内部运行 Docker 并非易事,因为大多数 PAAS 不允许特权模式。但是我有一个在 EC2 上运行的 Docker 守护进程,我在我的构建服务器中使用该守护进程使用

DOCKER_HOST
env 参数(使用 PEM 来保护连接)。它已经运行了大约一年。

现在我想在 Lambda 上运行它。一个很大的区别是 Lambda 使除

/tmp
之外的所有内容都是只读的。我使用
docker version
来验证连接。当我的构建脚本到达这个命令时,它失败了:

> DOCHER_HOST=ssh://[email protected] docker version
Client: Docker Engine - Community
 Version:           23.0.1
 API version:       1.42
 Go version:        go1.19.5
 Git commit:        a5ee5b1
 Built:             Thu Feb  9 19:46:56 2023
 OS/Arch:           linux/amd64
 Context:           default
error during connect: Get "http://docker.example.com/v1.24/version": fork/exec /usr/bin/ssh: operation not permitted

在那个构建服务器中,直接运行ssh没有问题:

> /usr/bin/ssh [email protected] pwd
/home/ubuntu
> which ssh
/usr/bin/ssh
> echo $(whoami)
sbx_user1051

看起来 Docker 要么试图写入只读文件系统,要么 docker 没有运行 ssh 命令的权限?权限不是我的强项,所以我花了几天时间从其他网站尝试这些类型的命令。我在构建服务器的 Dockerfile 中这样做:

RUN chmod 777 /root
RUN chmod 777 /usr
RUN chmod 777 -R /root
RUN chmod 777 -R /usr
RUN groupadd docker
RUN usermod -aG docker $USER
RUN usermod -aG docker sbx_user1051
RUN newgrp docker
RUN chmod 777 /var/run/docker.sock

注意:我知道这些是危险的权限。只是想让它工作,然后我会适当地取消它。

我走到了死胡同,因为我不知道如何进一步解决这个问题。有什么建议吗?

linux docker ssh aws-lambda
© www.soinside.com 2019 - 2024. All rights reserved.