Docker部署AWS SAM CLI后Go版本残留排查求助
解决AWS SAM CLI安装后镜像中存在Go但无法直接调用的问题
Go大概率是AWS SAM CLI安装过程中作为依赖隐式安装的,只是没被添加到系统全局
PATH里,所以直接执行go --version找不到,但漏洞扫描能检测到文件存在。先在容器里定位Go的位置,执行以下命令搜索可执行文件:
find / -name "go" -type f 2>/dev/null这个命令会遍历整个文件系统找名为
go的可执行文件,2>/dev/null用来屏蔽权限不足的报错信息。通常这类依赖会放在SAM CLI的安装目录下,比如/usr/local/aws-sam-cli/内部的子文件夹。找到路径后,在Dockerfile的安装步骤之后添加删除命令,比如找到的路径是
/usr/local/aws-sam-cli/dist/go,就加:RUN rm -rf /usr/local/aws-sam-cli/dist/go更稳妥的方式是用多阶段构建,把SAM CLI的安装和最终镜像分开,避免把构建依赖(包括Go)带入最终镜像:
# 第一阶段:安装SAM CLI及所有依赖 FROM python:3.9 AS sam-builder RUN pip install aws-sam-cli # 第二阶段:基于干净的基础镜像复制SAM CLI核心文件 FROM python:3.9-slim # 复制SAM CLI的执行文件和依赖目录 COPY --from=sam-builder /usr/local/bin/sam /usr/local/bin/sam COPY --from=sam-builder /usr/local/aws-sam-cli /usr/local/aws-sam-cli # 清理残留的Go相关文件 RUN find /usr/local/aws-sam-cli -name "go" -type d | xargs rm -rf验证:构建镜像后,执行
docker run --rm your-image find / -name "go" -type f 2>/dev/null,如果没有输出说明Go已被移除,再重新做漏洞扫描确认问题解决。
内容的提问来源于stack exchange,提问作者wonderfulworldwithcharity
相关产品推荐
相关产品推荐

