前言
不想把项目部署在宿主机上以免把环境搞乱了,但是每次通过宿主机进入容器感觉有点繁琐。突发奇想,能不能 ssh 直接进入容器。说干就干,整个流程比较简单,但有几个地方容易踩坑,本篇博文记录一下整个流程。希望能帮助到大家,避免踩坑,浪费时间。
环境和部署流程
本文使用的宿主机系统和容器系统都是 Centos7 。
创建容器
1
docker run -itd -p 40022:22 --name test --restart always --privileged=true centos:7 /usr/sbin/init
其中
--privileged=true、/usr/sbin/init两个参数一定要写上,原因可以查看下面的参考资料2,3两点,下面也有解释;还有一点就是要开放公网端口。我在查看资料的时候,也有遇到博文说加了
--privileged=true参数后为啥还是不能使用systemctl命令。这个的原因是因为dbus-daemon没能启动。其实systemctl并不是不可以使用。将你的CMD或者entrypoint设置为/usr/sbin/init即可。会自动将dbus等服务启动起来,然后就可以使用systemctl了。进入容器
1
docker exec -it test bash
更新系统并安装
openssh1
2yum update -y
yum install -y openssh-server后面重启
sshd服务会遇到一个问题 ——bash: service: command not found,解决方法:安装initscripts(yum install -y initscripts) ,详细查看参考资料第一点。修改
SSH配置文件1
vi /etc/ssh/sshd_config
修改下面的参数(我这边采用的是密码登录,如果你想使用秘钥登录自己修改对应的配置信息)
1
2
3Port 22
PermitRootLogin yes
PasswordAuthentication yes重启
sshd服务1
2
3systemctl restart sshd
或者
service sshd restartpasswd修改容器密码大功告成!
容器
ssh登录信息ip:宿主机ipport:宿主机port,教程上的40022端口password: 容器里修改的密码
当然后面还可以使用 docker commit 命令来创建镜像,方便后面使用,这边我就不一一介绍了。