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

如何通过COPY --from=在Dockerfile中安装OpenSSH Server构建最小镜像

用COPY --from方式在Docker镜像中安装OpenSSH Server

一、基础镜像选择建议

  • 优先选alpine/openssh而非linuxserver/openssh-server,前者基于Alpine,体积更小、文件结构更简洁,更适合用COPY方式提取文件;后者基于Debian/Ubuntu,依赖链复杂,后续COPY步骤会繁琐很多
  • 如果必须用linuxserver/openssh-server,需提前进入容器梳理所有依赖文件,成本更高

二、从alpine/openssh提取文件的核心清单

1. 核心二进制文件

直接复制主程序及配套工具:

  • /usr/sbin/sshd:SSH服务主进程
  • /usr/bin/ssh-keygen:密钥生成工具
  • /usr/bin/sshd-keygen:初始化SSH密钥的脚本

2. 依赖库文件

先在alpine/openssh容器中执行ldd /usr/sbin/sshd查看依赖,再把对应库文件复制到目标镜像的同路径下,示例依赖(以实际输出为准):

/lib/libcrypto.so.1.1
/lib/libc.so.6
/lib/libz.so.1

3. 配置与必要目录

  • 配置目录:/etc/ssh/(包含sshd_config等核心配置,建议整目录复制)
  • 运行时目录:/var/run/sshd/(需提前创建,用于存放服务PID文件)
  • 密钥文件:/etc/ssh/ssh_host_*(可在容器启动时用sshd-keygen生成,也可提前复制已生成的密钥)

三、Dockerfile示例

# 基础镜像选用最小的alpine镜像
FROM alpine:latest AS target-base

# 拉取SSH源镜像
FROM alpine/openssh:latest AS ssh-source

# 构建目标镜像
FROM target-base

# 复制SSH二进制文件
COPY --from=ssh-source /usr/sbin/sshd /usr/sbin/sshd
COPY --from=ssh-source /usr/bin/ssh-keygen /usr/bin/ssh-keygen
COPY --from=ssh-source /usr/bin/sshd-keygen /usr/bin/sshd-keygen

# 复制依赖库(根据ldd结果调整)
COPY --from=ssh-source /lib/libcrypto.so.1.1 /lib/libcrypto.so.1.1
COPY --from=ssh-source /lib/libc.so.6 /lib/libc.so.6
COPY --from=ssh-source /lib/libz.so.1 /lib/libz.so.1

# 复制配置目录
COPY --from=ssh-source /etc/ssh /etc/ssh

# 创建必要的运行目录
RUN mkdir -p /var/run/sshd

# 设置启动命令
CMD ["/usr/sbin/sshd", "-D"]

四、关键注意事项

  • 复制后需验证文件权限,确保sshd拥有执行权限(可通过RUN chmod +x /usr/sbin/sshd兜底)
  • 必须保证源镜像与目标镜像的libc类型一致(比如alpine用musl libc,不能复制到基于glibc的镜像中),否则程序会无法运行
  • 不确定文件路径时,可执行docker run --rm -it alpine/openssh sh进入源容器,手动排查所有需要的文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:05:02