You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker文档SSH访问构建私有数据示例在多设备运行失败求助

Docker构建ssh-keyscan github.com无输出导致构建失败

操作背景

按照Docker官方指引实现构建时通过SSH访问私有Git仓库,操作步骤:

  • 执行ssh-add ~/.ssh/id_rsa将SSH私钥添加到认证代理
  • 编写Dockerfile(仅替换私有仓库地址):
# syntax=docker/dockerfile:1
FROM alpine

# Install ssh client and git
RUN apk add --no-cache openssh-client git

# Download public key for github.com
RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts

# Clone private repository
RUN --mount=type=ssh git clone git@github.com:myorg/myproject.git myproject

执行构建命令docker build --ssh default .时,第三步RUN指令失败,退出码1,排查发现ssh-keyscan github.com无输出。三台设备(Windows、Ubuntu、Mac)均可通过SSH正常克隆仓库,但单独执行该命令均无输出。

解决方案

方案1:指定端口执行ssh-keyscan

部分网络环境会屏蔽SSH默认的22端口,可指定GitHub支持的443端口进行扫描:
修改Dockerfile中的对应指令为:

RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan -p 443 github.com >> ~/.ssh/known_hosts

或同时扫描22和443端口,提升兼容性:

RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan github.com,github.com:443 >> ~/.ssh/known_hosts

方案2:直接写入GitHub官方SSH公钥

跳过扫描步骤,直接将GitHub官方提供的SSH公钥写入known_hosts,避免扫描失败:

RUN mkdir -p -m 0700 ~/.ssh && \
    echo "github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl" >> ~/.ssh/known_hosts && \
    echo "github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg=" >> ~/.ssh/known_hosts && \
    echo "github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=" >> ~/.ssh/known_hosts

方案3:排查网络连通性

先验证构建环境是否能连通GitHub的SSH端口,可启动临时容器测试:

docker run --rm -it alpine sh
# 容器内执行
apk add --no-cache openssh-client netcat-openbsd
nc -zv github.com 22
nc -zv github.com 443

如果22端口不通,优先使用方案1的443端口扫描方式。

内容的提问来源于stack exchange,提问作者OES

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 05:24:10