如何构建一个带ssh的rockylinux的docker镜像
时间:2024-12-16 12:24 作者:Anglei 分类: 虚拟化
要构建一个带有SSH服务的Rocky Linux Docker镜像,你可以按照以下步骤进行:
一、准备Dockerfile
首先,你需要创建一个Dockerfile,它定义了构建镜像所需的所有步骤。以下是一个示例Dockerfile,用于构建带有SSH服务的Rocky Linux镜像:
# 使用Rocky Linux作为基础镜像
FROM rockylinux:latest
# 更新系统并安装必要的软件包
RUN yum -y update && yum -y install openssh-server passwd && yum -y install net-tools
# 设置root密码(可选,但出于安全考虑,建议使用更安全的认证方式)
RUN echo 'root:yourpassword' | chpasswd
# 允许root用户通过SSH登录(默认配置可能禁止root登录)
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# 生成ssh-keygen,以免无法正常启动sshd,导致报错
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ""
RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
RUN chown root:root /etc/ssh/ssh_host_*_key
RUN chmod 600 /etc/ssh/ssh_host_*_key
# 确保SSH服务在容器启动时自动运行
RUN mkdir -p /var/run/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
请注意,将yourpassword
替换为你希望设置的root密码。然而,出于安全考虑,强烈建议使用密钥认证而不是密码认证。
二、构建Docker镜像
在Dockerfile所在的目录下,运行以下命令来构建Docker镜像:
docker build -t rocky-ssh:latest .
这将创建一个名为rocky-ssh
的Docker镜像,标签为latest
。
三、运行Docker容器
使用以下命令来运行新构建的Docker容器,并将容器的22端口映射到主机的某个端口(例如10022), 或者取消映射,只在内网使用:
docker run -d -p 10022:22 --name rocky-ssh-container rocky-ssh:latest
或
docker run -d--name rocky-ssh-container rocky-ssh:latest
这里,-d
选项表示以守护进程模式运行容器,--name
选项为容器指定了一个名称,-p
选项将容器的22端口映射到主机的10022端口。
四、验证SSH服务
首先获取docker镜像的IP地址:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <容器ID或名称>
现在,你应该能够通过SSH连接到运行中的容器。使用以下命令进行连接:
ssh IP -p 10022
或
ssh IP
系统会提示你输入密码,输入你在Dockerfile中设置的root密码即可登录。
如果显示本地登录过这个IP,所存的秘钥信息不一致,则需要先清除一下:
ssh-keygen -f "/root/.ssh/known_hosts" -R "IP地址"
五、注意事项
- 安全性:如前所述,出于安全考虑,不建议在Dockerfile中设置root密码。相反,你应该配置密钥认证,并限制允许访问的IP地址范围。
- 持久化存储:如果你希望在容器停止后保留数据(例如SSH密钥、用户配置等),你需要使用Docker的卷(volumes)功能来持久化存储这些数据。
- 防火墙配置:确保你的主机防火墙允许通过你选择的端口(例如10022)进行SSH连接。
通过上述步骤,你应该能够成功地构建一个带有SSH服务的Rocky Linux Docker镜像,并在其中进行各种操作。

推荐阅读:
![]() 路过(0) |
![]() 雷人(0) |
![]() 握手(1) |
![]() 鲜花(2) |
![]() 鸡蛋(0) |