很多时候用户希望通过远程登录服务器来进行管理,但是Docker的很多镜像都不支持SSH服务,接下来将会介绍为Docker镜像添加SSH服务的两种方法:
1. 基于Commit命令的创建
通过对容器进行ssh的配置,生成一个新的镜像。
首先获取ubuntu:18.04的镜像,之后创建一个名叫ssh的容器
docker pull Ubuntu:18.04
docker run -it --name ssh ubuntu:18.04 bash
可能会出现如下的错误
Error:WARNING: IPv4 forwarding is disabled. Networking will not work.
解决方法: vim /usr/lib/sysctl.d/00* 添加(本地文件)
net.ipv4.ip_forward=1,删除容器,重启网络(systemctl restart network),
重新创建容器
使用apt-get update更新软件源。
如果觉得官方的软件源下载速度慢的话,可以更换软件源。 vi
/etc/apt/sources.list.d/name,name可以更具软件源的名字命名,我用的163的
deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
之后选择主流的openssh-server作为服务端。
apt-get install opessh-server
如果需要正常启动ssh,则容器内必须要有/var/run/sshd的目录
mkdir -p /var/run/sshd
/usr/sbin/sshd -D & (启动ssh服务)
ssh默认监听的端口为22,此时使用以下命令查看端口状态
natstat -tunlp

修改ssh服务的安全登录配置,取消pam
sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
在root用户下创建.ssh目录 。在其中创建authorized_keys文件
mkdir -p root/.ssh
vi /root/.ssh/authorized_keys
该文件内容一般为本地主机用户文件夹下的~/.ssh/id_rsa.pub的内容,如果主机中没有这个文件夹,得root命令来生成秘钥,并放至该文件中。
此时配置ssh基本完成,此时需要创建自动启动ssh的文件run.sh,并添加可执行权限
vi /run.sh
chmod +x run.sh
文件内容如下:
#!/bin/bash
/usr/sbin/sshd -D
之后退出容器,提交该容器为镜像即可
docker commit
2.基于Docker命令的创建
首先创建一个工作目录 mkdir sshd_ubuntu
之后在该目录中创建run.sh(与上面run.sh内容一致) , Dockerfile。
ssh-keygen -t rsa生成秘钥,一般生成文件在~/.ssh文件下,
cat ~/.ssh/id_rsa.pub >authorized_keys生成一个authorized_keys文件
Dockerfile:
#继承镜像
FROM ubuntu:18.04
#提供作者信息
MAINTAINER docker_user (jonty1@docker.com)
#更新软件源
RUN apt-get update
#安装ssh
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd
RUN mkdir -p /root/.ssh
#取消pam登录
RUN sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
#复制 ~/.ssh/authorized_keys,并赋予执行权限
ADD authorized_keys /root/.ssh/authorized_keys
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#打开ssh端口
EXPOSE 22
#设置自启命令
CMD ["/run.sh"]
最后,使用docker build 命令创建即可。
3.使用镜像
前面教会了你怎样去为镜像配置ssh服务,接下来的内容将会带你去使用带有ssh服务的镜像。
首先使用之前commit的镜像创建一个容器:
docker run -p 10022:22 -d --name ssh1 /run.sh
-d: 让容器在后台运行
-p:主机与容器端口的映射,ssh的默认端口为22
之后就可以使用在宿主主机访问10022端口来登录该容器,
$ ssh ip -p 10022

写作不易,关注一下呗xiaolian☺
本文详细介绍了如何为不支持SSH服务的Docker镜像添加SSH服务,通过两种方法:基于Commit命令创建和基于Dockerfile创建。文章还提供了使用自定义软件源加速软件包下载、配置SSH服务及创建自动启动SSH的脚本等实用步骤。

1071

被折叠的 条评论
为什么被折叠?



