西数超哥博客www.ysidc.top原创文章,转载请注明出处。
之前我们讲解了如何通过主机本身进入的服务器管理容器,这种方法需要我们进去宿主机才可以进行操作。现在我们可以通过镜像中搭建安装ssh,这样以后启动容器的时候我们映射一个端口,这样可以通过外网管理该容器了,可以参考本站文章《Docker网络基础配置基础以及如何进行主机-容器端口映射和进行容器互联实现容器间通信》下边简单讲述下方法。
由于官网的镜像一般是最小化安装且没有安装ssh,今天我们以一个docker官网centos镜像为例安装ssh。
1,查看镜像是否有centos,如果有就进行后续操作,没有就去pull一个。
2,搭建ssh镜像。
创建容器,并映射主机端口22000到容器的22端口上:
docker run -d -ti –name ssh-centos -p 22000:22 centos /bin/bash
查看容器启动情况:
[root@21yunwei ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a955391bd0b4 centos "/bin/bash" About a minute ago Up About a minute 0.0.0.0:22000>22/tcp ssh-centos
进入容器:
docker exec -ti ssh-centos /bin/bash
进去时候安装ssh:
yum install openssh-server -y
安装完以后启动ssh服务并查看端口监听情况:
[root@a955391bd0b4 /]# /usr/sbin/sshd [root@a955391bd0b4 /]# netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 27/sshd tcp6 0 0 :::22 :::* LISTEN 27/sshd
好了,启动成功。 远程测试:
好了,登录成功:
[root@a955391bd0b4 ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.6 netmask 255.255.0.0 broadcast 0.0.0.0 inet6 fe80::42:acff:fe11:6 prefixlen 64 scopeid 0x20 ether 02:42:ac:11:00:06 txqueuelen 0 (Ethernet) RX packets 125 bytes 14200 (13.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 94 bytes 12693 (12.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
为了方便使用,使用ssh-centos容器提交一个新的镜像,比如:
[root@21yunwei ~]# docker commit ssh-centos centos7-ssh [root@21yunwei ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos7-ssh latest 1aa38242b4ec 22 minutes ago 330.2 MB
以后再去创建基于centos7-ssh的容器就自带有ssh,可以自己随意映射端口进去管理了。
说明:
在容器中通过systemctl 命令启动sshd的时候会报Failed to get D-Bus connection: Operation not permitted错误, 解决办法就是在docker run 的时候运行/usr/sbin/init。比如
docker run -dti --name centos2 -p 22001:22 centos /usr/sbin/init
网上搜索资料,小伙伴遇到的情况如下:
这样运行起来的container就可以使用systemctl来启动服务了,有的人说在CentOS7.2中解决了通过systemctl运行报错的问题,但是我在实际操作中还是遇到这样的问题。 还有一种解决办法,就是在通过Dockerfile生成镜像文件的时候,通过CMD来执行/usr/sbin/init这条命令,即:CMD [ “/usr/sbin/init”];
转载请注明:西数超哥博客www.ysidc.top» Docker容器如何进行远程管理-搭建基于ssh服务的镜像和容器
https://www.ysidc.top 西数超哥博客,数据库,西数超哥,虚拟主机,域名注册,域名,云服务器,云主机,云建站,ysidc.top