在基于alpine的Dockerfile中安装git和git-secrets
1. Dockerfile的含义
在下面的描述中,我们成功地在基于Alpine的Dockerfile中安装了git和git-secrets。可能还有更合适的方法,但我们希望这对那些遇到类似问题的人有所帮助,所以我们将其保留下来。
FROM node:16-alpine3.16
RUN apk update && \
apk add bash git make && \
apk add --upgrade grep
RUN git clone https://github.com/awslabs/git-secrets /home/alpine/git-secrets
WORKDIR /home/alpine/git-secrets
RUN make && make install
# 以下略
<参考>
・moduscreate/alpine-git-secrets -> 模迪斯创造/ 阿尔派尼-隐藏.git
以下是一些参考,列出了在工作过程中遇到的错误。关于实际的Dockerfile和docker-compose.yml的详细信息,请参阅此文章。
2. 错误示例
下面是在作业中出现的错误列表。
我将写下错误信息和解决方法。
环境:无法执行’bash’:找不到文件或目录
如果只是安装了git。
RUN apk update && apk add git
当使用这个命令进行 git commit 时,会出现错误提示说“无法执行 bash”。
# git commit -m "test commit"
env: can't execute 'bash': No such file or directory
只要在RUN命令中添加apk add bash,就可以解决这个问题。
参考文献:
・Docker构建错误:环境:无法执行’bash’:没有该文件或目录
・从Ubuntu迁移到Alpine以减小镜像容量的示例
2-2. git: ‘secrets’ 不是一个有效的 git 命令。请查看 ‘git –help’。
下面是只安装了 git 和 bash 的情况。
RUN apk update && apk add git bash
如果使用这个命令进行 git commit,会出现“’secrets’ 不是 git 命令”的错误提示。
# git commit -m "test commit"
git: 'secrets' is not a git command. See 'git --help'.
只需提供一种选择性地将以下内容以母语中文重新表述:
由于未安装git-secrets导致的错误,只需安装git-secrets即可解决。
另外,你还可以通过以下命令在提交时不调用 git-secrets(虽然不是理想解决方法)。
# rm -r .git/hooks
<参考>
・解决git-secrets删除后的错误的方法
2-3. grep命令:无法识别选项:d。
接下来是安装 git、bash 和 git-secrets。
RUN apk update && \
apk add bash git make
RUN git clone https://github.com/awslabs/git-secrets /home/alpine/git-secrets
WORKDIR /home/alpine/git-secrets
RUN make && make install
使用git commit时会出现“无法识别grep的-d选项”错误。
# git commit -m "test commit"
grep: unrecognized option: d
BusyBox v1.35.0 (2022-08-01 15:14:44 UTC) multi-call binary.
Usage: grep [-HhnlLoqvsrRiwFE] [-m N] [-A|B|C N] { PATTERN | -e PATTERN... | -f FILE... } [FILE]...
Search for PATTERN in FILEs (or stdin)
-H Add 'filename:' prefix
-h Do not add 'filename:' prefix
-n Add 'line_no:' prefix
-l Show only names of files that match
-L Show only names of files that don't match
-c Show only count of matching lines
-o Show only the matching part of line
-q Quiet. Return 0 if PATTERN is found, 1 otherwise
-v Select non-matching lines
-s Suppress open and read errors
-r Recurse
-R Recurse and dereference symlinks
-i Ignore case
-w Match whole words only
-x Match whole lines only
-F PATTERN is a literal (not regexp)
-E PATTERN is an extended regexp
-m N Match up to N times per file
-A N Print N lines of trailing context
-B N Print N lines of leading context
-C N Same as '-A N -B N'
-e PTRN Pattern to match
-f FILE Read pattern from file
只需在步骤“RUN”中添加“apk add –upgrade grep”并升级“grep”即可解决。
参考:
・[RFC] 使其能够兼容Alpine Linux / BusyBox grep
・[alpine] sh:未找到make
以上