本来以为很简单就可以搞出来的,真正去弄才知道需要照顾的细节真多啊。。。。
硬生生搞了一下午otl
把最后实现的过程发出来给大家参考
1. 先上dockerhub上pull一个需要的镜像下来,然后run这个镜像生成一个容器
docker run -dit --name [container_name] --privileged=true
[images]:[tag] /sbin/init
-
--privileged=true 一定要写 不然不能用systemctl重启、启用ssh服务
-
必须从/sbin/init进入 不然systemctl不能用
如果提示找不到/sbin/init文件夹的话,先直接用/bin/bash进入 就会生成/sbin/init,再把这个容器打包
2. 进入到容器,安装ssh服务。
先设个密码
passwd
镜像默认安装体量最小的版本,所以首先要给apt-get(debian) or yum(centos) 升级 运行
apt-get update
然后安装
apt-get install vim openssh-server
修改ssh配置文件:
vim /etc/ssh/sshd_config
修改内容
PubkeyAuthentication yes #启用公钥私钥配对认证方式 AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径(和上面生成的文件同) PermitRootLogin yes #root能使用ssh登录 ClientAliveInterval 60 #参数数值是秒 , 是指超时时间 ClientAliveCountMax 3 #设置允许超时的次数 UsePAM yes 更改为 UsePAM no Port 80 #指定好端口号,默认是22 后面这个数字要在你run容器的时候用到
保存之后,重启ssh服务并设置开机启动
systemctl restart sshd.service systemctl enable sshd.service
基本上设置好了 退出这个容器
3. 保存成新镜像
docker commit -m 'messages' -a '' [container_id] [image_name]
保存完后可以用docker images看到你新保存的镜像
用这个新镜像开启一个可以提供ssh服务的容器:
docker run --name [container_name] -dit -p 11111:80 [ssh image] /etc/init.d/ssh start -D
-
/etc/init.d/ssh start -D 使用sshd开启服务 有教程说可以用/usr/sbin/sshd -D 我没成功
-
11111 是你用ssh连接时用到的数字 80是你容器内部开的端口
然后就可以用ssh连接了
ssh root@[ip] -p 11111
照各种博客搞了超久。。。。搞定!
参考博客:
docker中安装ssh服务
使用ssh直连docker容器的方法 :解决Connection refused报错
用ssh连接docker容器



