Docker 容器后台运行和前台运行的区别Posted by simapple on Tuesday, 19 August 2014后台运行vs前台运行当你启动一个docker 容器的时候,第一件事就是要确认你要在前台运行还是在后台运行:-d=false:Detached mode:Run container in the background,printnew container id后台运行 (-d)后台运行直接指定 (-d=true or just -d),这样的话所有的 *** 作类似网络连接,共享 *** 作等等都不会再接受命令行的命令控制。你就要使用attach命令 来进入一个容器,再管理它,注意当你attach链接到一个容器的时候,你就不能再使用 rm 来删除这个容器。前台运行当你不指定-d时,就是在前台运行, docker run 可以启动一个进程,并且通过console 连接进程的标准输入 输出和标准错误。它甚至可以伪装成一个TTY,发送信号量。所有这一切都是可以配置的。-a=[]:Attach to `STDIN`,`STDOUT`and/or`STDERR`-t=false:Allocate a pseudo-tty--sig-proxy=true:Proxify all received signal to the process (even in non-tty mode)-i=false:Keep STDIN open even ifnot attached如果你不想使用 -a 来连接容器的所有输入输出,那么你可以指定你希望接受的流STDIN, STDOUT, STDERR):$ docker run -a stdin -a stdout -i -t ubuntu /bin/bash在交互式的情况下,你最希望得到一个类似TTY那样的shell,你可以 指定 -i -t taxonomyextra: docker
Docker容器的架构包括装有主机 *** 作系统的物理机器。主机 *** 作系统上面部署了Docker引擎,引擎有助于构建用来托管运行应用程序的虚拟容器。Docker引擎构建隔离的容器,应用程序就可以部署在这些容器上面。不像典型的虚拟机管理程序解决方案,Docker不需要为每个应用程序构建单独的虚拟机,也不需要为每个虚拟机安装来宾 *** 作系统。/thread/215659在基于虚拟机管理程序的应用程序虚拟化中,虚拟化平台(比如Hyper-V或VMware)部署在装有主机 *** 作系统的物理服务器上。虚拟化平台上构建了虚拟机,每个虚拟机都有独立的来宾 *** 作系统。应用程序部署在所有这些层上。托管运行那么多的虚拟机(每个虚拟机都有独立的来宾 *** 作系统)让这种架构对资源的需求量比Docker容器大得多。容器自动化计算资源需求进程隔离和安全启动时间应用程序交付硬件兼容性企业级功能供应商
Docker 是当今使用范围最广的开源容器技术之一,具有高效易用的优点。然而如果使用Docker时采取不当安全策略,则可能 导致系统面临安全威胁。
本期安仔课堂,ISEC实验室的张老师 将为大家介绍不同环境下, Docker逃逸至外部宿主机的情况。
一、配置特权模式时的逃逸情况
1--privileged(特权模式)
特权模式于版本06时被引入Docker,允许容器内的root拥有外部物理机root权限,而此前容器内root用户仅拥有外部物理机普通用户权限。
使用特权模式启动容器, 可以获取大量设备文件访问权限 。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。
当控制使用特权模式启动的容器时,docker管理员可通过mount命令将外部宿主机磁盘设备挂载进容器内部, 获取对整个宿主机的文件读写权限 ,此外还可以 通过写入计划任务等方式在宿主机执行命令 。
具体步骤如下:
1以特权模式运行一个容器:docker run -it --privileged ubuntu:1404 /bin/bash
2查看磁盘文件:fdisk -l
3此时查看/dev/路径会发现很多设备文件:ls /dev
4新建目录以备挂载:mkdir /abc
5将/dev/sda1挂载至 /abc: mount /dev/sda1 /abc
6最终我们可以通过访问容器内部的/abc路径来达到访问整个宿主机的目的:ls /abc
7尝试写文件到宿主机:echo 123 > /abc/home/botasky/escape2
8查看宿主机中的文件:ls /home/botasky/escape2
2--cap-add与SYS_ADMIN
Linux内核自版本22起引入功能(capabilities)机制,打破了UNIX/LINUX *** 作系统中超级用户与普通用户的概念, 允许普通用户执行超级用户权限方能运行的命令 。
截至Linux 30版本,Linux中共有 38种capabilities。Docker容器默认限制为14个capabilities ,管理员可以使用--cap-add和--cap-drop选项 为容器精确配置capabilities 。
当容器使用特权模式启动时,将被赋予所有capabilities。此外,在--cap-add的诸多选项中,SYSADMIN意为container进程允许执行mount、umount等一系列系统管理 *** 作,因此当容器以--cap-add=SYSADMIN启动时,也将面临威胁。
二、挂载配置不当时的逃逸情况
1危险的Dockersock
众所周知,Docker采用C/S架构,我们平常使用的Docker命令中,docker即为client,Server端的角色由docker daemon扮演,二者之间 通信方式有以下3种:
其中 使用dockersock进行通信为默认方式 ,当容器中进程需在生产过程中与Docker守护进程通信时,容器本身需要挂载/var/run/dockersock文件。
本质上而言,能够访问docker socket 或连接>
以上就是关于怎么让Docker容器在后台以守护态形式运行全部的内容,包括:怎么让Docker容器在后台以守护态形式运行、docker守护进程退出,所有容跟着退出有什么好的解决方案、干货来啦!带你初探Docker逃逸等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)