在基于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

以上

广告
将在 10 秒后关闭
bannerAds