Dockerfile 使用 ssh 下载私有 git 项目

警告
本文最后更新于 2022-11-24,文中内容可能已过时。

为了在 Docker 镜像里面下载私有 git 项目代码,我们需要告诉 Dockerfile 如何调用主机的 ssh 公钥。

Dockerfile

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#syntax=docker/dockerfile:1.0.0-experimental

## 假设私有 git 网站是:192.168.1.171,
## 如果是 github,替换成 github.com
RUN mkdir -p ~/.ssh && \
    chmod 700 ~/.ssh && \
    ssh-keyscan 192.168.1.171 >> ~/.ssh/known_hosts && \

RUN --mount=type=ssh && \
    mkdir -p ~/git && cd ~/git && \
    git clone git@192.168.1.171:lfang/wepy.git && \
    cd wepy && \
    bash ./install.venv.sh && \
    rm -rf ~/git/wepy

这里需要注意:

  • Dockerfile 第一行(前面不能有其他注释)添加

    1
    
    #syntax=docker/dockerfile:1.0.0-experimental
  • 添加 ssh-keyscan 避免 unknown host 错误

  • 使用 Run --mount=type=ssh XXX 执行需要的命令

  • 另外,我们在上层的 Dockerfile 不能有以下命令,这个会干扰 git 的权限问题

    1
    2
    3
    
    echo "Host *"                       >> ~/.ssh/config && \
    echo "    ServerAliveInterval 60"   >> ~/.ssh/config && \
    echo "    ServerAliveInterval 60"   >> ~/.ssh/config && \

Docker build

1
2
3
4
5
6
7
## ----------------------------------------------------------------------------
## build
export COMPOSE_DOCKER_CLI_BUILD=1
export DOCKER_BUILDKIT=1
# DOCKER_BUILDKIT=1 proxychains4 docker build --ssh default -t datamgr:v1.0 .
DOCKER_BUILDKIT=1 docker build --ssh default -t datamgr:v1.0 .
## ----------------------------------------------------------------------------

这里需要注意:

  • 使用 ``DOCKER_BUILDKIT=1 开启实验性功能(–mount`)

相关内容

william 支付宝支付宝
william 微信微信
0%