docker

用ssh连接docker容器

2021-01-31  本文已影响0人  fanderboy

一、用docker commit 的方式创建ssh直连docker容器镜像

1.拉取镜像,这里采用centos作为基础镜像

docker pull centos

2、运行镜像,生成容器

docker run -d --name centos --privileged=true centos /usr/sbin/init

--name 给新生成的容器命名
--privileged=true 给容器访问Linux内核特权,后面要访问systemctl
返回一串容器ID表示容器生成成功

3、进入刚刚生成的容器

docker exec -it centos /bin/bash

4、进入容器后,使用passwd密码来修改密码(如提示没有这个命令行使用yum install passwd安装)

passwd

5、安装vim和Openssh

yum install vim openssh-server openssh-clients -y

6、修改SSH配置文件

vim /etc/ssh/sshd_config

修改如下:

PubkeyAuthentication yes #启用公钥私钥配对认证方式 
AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径(和上面生成的文件同) 
PermitRootLogin yes #root能使用ssh登录
ClientAliveInterval 60  #参数数值是秒 , 是指超时时间
ClientAliveCountMax 3 #设置允许超时的次数

7、重启ssh服务,并设置开机启动

systemctl restart sshd.service
systemctl enable sshd.service

(Failed to get D-Bus connection: Operation not permitted)
这里如果报这个错误说明容器权限不足,第2步执行有误

8、退出容器并保存更改

exit

9、用刚才生成的容器创建镜像

docker commit -m 'openssh' -a 'Docker for ssh' ffe81683c404 centos

-m:来指定提交的说明信息,跟我们使用的版本控制工具一样
-a 可以指定更新的用户信息
ffe81683c404: 创建镜像的容器的ID,就是上面的容器id,也就是我们刚才进入的容器id
centos: 目标镜像的仓库名

10、查看到新生成的镜像

docker images

11、删除构建容器(可选)

我们用centos基础容器修改配置后已经生成了所需要的镜像,之前的构建容器就可以删除了

docker stop centos
docker rm centos

12、用新生成的镜像启动新的容器并打通22端口

docker run -d --name centos -p 22:22 centos /usr/sbin/sshd -D

13、然后可以使用xshell连接新生成的容器

ip: 为宿主主机的ip
端口:就是上面的22
用户名: root
密码: 就是上面password部分设置的密码
在mac上可通过ssh root@127.0.0.1 -p:22 登录新生成的容器

至此ssh连接docker容器连接成功。

二、以Dockerfile的方式创建ssh直连docker容器

1、创建Dockerfile文件

#生成的新镜像以centos:latest镜像为基础
FROM centos

MAINTAINER xxx "xxx@xxx.com"
#升级系统
RUN yum -y update

WORKDIR /home/workspace

#安装openssh-server及其他必要软件
RUN yum install -y net-tools vim gcc-c++ langpacks-zh_CN openssh-server java-1.8*
#修改/etc/ssh/sshd_config
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
# 生成sshkey
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

#变更root密码
RUN echo "root:123456"|chpasswd

#开放窗口的22端口
EXPOSE 22

#设置时区和系统区域语言
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf

#运行脚本,启动sshd服务
CMD    ["/usr/sbin/sshd", "-D"]

2、在dockerfile文件同级目录中运行创建命令

docker build --no-cache -t centos:1.0.0 .

命令成功后,就会创建一个名字为centos:1.0.0的image,可以使用“docker images”来查看

3、 根据镜像创建容器

docker run -itd --name centos-test -p 22:22 --log-opt max-size=30m --log-opt max-file=3 -v $PWD(本地目录):/workspace(容器目录) centos:1.0.0

4、然后可以使用xshell连接新生成的容器

ip: 为宿主主机的ip
端口:就是上面的22
用户名: root
密码: 就是上面password部分设置的密码
在mac上可通过ssh root@127.0.0.1 -p:22 登录新生成的容器

上一篇下一篇

猜你喜欢

热点阅读