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
相关产品推荐
相关产品推荐

