前言
不想把项目部署在宿主机上以免把环境搞乱了,但是每次通过宿主机进入容器感觉有点繁琐。突发奇想,能不能 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
更新系统并安装
openssh
1
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
:宿主机ip
port
:宿主机port
,教程上的40022
端口password
: 容器里修改的密码
当然后面还可以使用 docker commit
命令来创建镜像,方便后面使用,这边我就不一一介绍了。