解决docker容器的访问问题,通过暴露22端口映射到宿主机端口,用ssh连接,可实现对容器内终端的可视化和编辑功能。
-
一、编写dockerfile
-
FROM ubuntu # Copy everything COPY . ./ EXPOSE 22 -
二、制作镜像
-
docker build -t ubt . -
三、运行容器
-
docker run -it -p 8089:22 ubt -
遇到一个问题:
-
ssh root@127.0.0.1:8089ssh: Could not resolve hostname 127.0.0.1:8089: Name or service not known
-
根本就ping不通
-
ping 127.0.0.1:8089
ping: 127.0.0.1:8089: Name or service not known
-
这是因为docker里还没有安装ssh
-
四、docker内配置
-
apt-get update apt-get upgrade apt-get install -y openssh-server apt-get install -y openssh-server --fix-missing 选择地区:Asia Shanghai mkdir /var/run/sshd echo 'root:screencast' |chpasswd service ssh start -
五、宿主机上连接
-
ssh root@127.0.0.1 -p 8089 -
但是还有一个bug:
-
Permission denied, please try again.
-
六、docker里设置
-
^C结束ssh -
apt-get install vim -
vim /etc/ssh/sshd_config -
在末尾加上
-
RSAAuthentication yes PermitRootLogin yes -
修改root用户的密码
-
passwd root service ssh restart -
七、成功
-
此时,再登录ssh
-
ssh root@127.0.0.1 -p 8089
-
八、后续问题
-
这种方式最多只能连接10个
-
ssh root@127.0.0.1 -p 8089ssh_exchange_identification: read: Connection reset by peer
-
这是因为并发数限定了
-
-
于是,
-
vim /etc/ssh/sshd_config -
将
MaxStartups改为80:10:100
(从第80个并发开始,以10%的几率拒绝访问,从100个并发开始全部拒绝)
service ssh restart
又可以访问了!
但是最好还是记得exit+回车优雅地退出吧~