10docker系列docker文件

主旨

docker容器使用过程中,经常会有将日志或者数据放到宿主机上,亦或者配置文件读取宿主机的,别的都使用docker容器里面的,这种情况下我们该如何配置呢?难不成每次都重新打镜像?而且你是不是还会发现容器里面明明就是root用户,咋执行一些命令还提示我没有权限呢?咋滴,还有比root用户权限更大的用户嘛?本文就是为了解决这种问题的。

环境

linux环境docker环境

文件共享

在docker使用过程中,我们会遇到将日志或者数据放置到宿主机的情况,下面我们看下如何进行配置:

语法:-v宿主机目录:容器目录实例:[yunweijia

localhost~]$sudodockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEyunweijiajenkinsd65da21b92daysagoMByunweijiapythoneafafc32daysagoMBnginxlatestcd5aa52weeksagoMBcentos7eeb6ee3f44bd5monthsagoMB[yunweijia

localhost~]$mkdir-pvdocker/logsmkdir:已创建目录"docker/logs"[yunweijia

localhost~]$cddocker/logs/[yunweijia

localhostlogs]$ls#可以看到这个时候这个目录下是空的[yunweijia

localhostlogs]$sudodockerrun-d-p80:80-v/home/yunweijia/docker/logs:/var/log/nginxnginx4e9a30da52b3de7daab70bb6ca1ab3bee5cf3bf4d4ff6e69ec[yunweijia

localhostlogs]$

使用浏览器访问几次nginx:

再看下这个目录下的内容:

[yunweijia

localhostlogs]$lsaccess.logerror.log[yunweijia

localhostlogs]$tailaccess.log...1--[16/Feb/:02:32:18+]"GET/HTTP/1.1""-""Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/.36(KHTML,likeGecko)Chrome/98.0..Safari/.36""-"[yunweijia

localhostlogs]$

以上就是我们将宿主机目录和容器目录共享了,文件只保留在宿主机上了,容器中看到的也是这个目录下的文件,即,如果删除宿主机的文件,容器中也不存在了,如下:

[yunweijia

localhostlogs]$lsaccess.logerror.log[yunweijia

localhostlogs]$rm-faccess.log[yunweijia

localhostlogs]$lserror.log[yunweijia

localhostlogs]$[yunweijia

localhostlogs]$sudodockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES4e9a30da52b3nginx"/docker-entrypoint.…"5minutesagoUp5minutes0.0.0.0:80-80/tcp,:::80-80/tcpmystifying_bartik[yunweijia

localhostlogs]$sudodockerexec-it4e9a/bin/bashroot

4e9a30da52b3:/#cd/var/log/nginx/root

4e9a30da52b3:/var/log/nginx#lserror.logroot

4e9a30da52b3:/var/log/nginx#exitexit[yunweijia

localhostlogs]$

特权模式

使用docker容器的时候是不是发现有些命令,比如mount命令,执行的时候提示你没有权限,如下:

[yunweijia

localhostlogs]$sudodockerrun-itcentos:7/bin/bash[root

c4cbce0c/]#[root

c4cbce0c/]#lsblklsblk:dm-0:failedtogetdevicepathlsblk:dm-1:failedtogetdevicepathlsblk:dm-0:failedtogetdevicepathlsblk:dm-1:failedtogetdevicepathNAMEMAJ:MINRMSIZEROTYPEMOUNTPOINTsda8:G0disk

-sda18:G0part`-sda28:G0partsr:.2G0rom[root

c4cbce0c/]#mkdir/[root

c4cbce0c/]#mount/dev/sda1//mount:permissiondenied[root

c4cbce0c/]#

原来,docker里面的root用户,默认就是一个普通用户的权限,如果你想真正拥有root权限,那么你就需要在启动的时候添加如下参数:

语法:--privileged=true实例:[yunweijia

localhostlogs]$sudodockerrun-it--privileged=truecentos:7/bin/bash[root

8ab20e/]#lsblklsblk:dm-0:failedtogetdevicepathlsblk:dm-1:failedtogetdevicepathlsblk:dm-0:failedtogetdevicepathlsblk:dm-1:failedtogetdevicepathNAMEMAJ:MINRMSIZEROTYPEMOUNTPOINTsda8:G0disk

-sda18:G0part`-sda28:G0partsr:.2G0rom[root

8ab20e/]#mkdir//[root

8ab20e/]#mount/dev/sda1//[root

8ab20e/]#df-hFilesystemSizeUsedAvailUse%Mountedonoverlay17G11G6.5G62%/tmpfs64MM0%/devtmpfs1.9G01.9G0%/sys/fs/cgroupshm64MM0%/dev/shm/dev/mapper/centos-root17G11G6.5G62%/etc/hosts/dev/sda14MMM17%/[root

8ab20e/]#exitexit[yunweijia

localhostlogs]$

当然了,不仅仅是只有mount命令这样,其他命令肯定也有类似的情况,你只要记住,只要是在docker容器中报错没有权限(permissiondenied),你就需要用特权模式来启动了,提升你的root用户获取真正的root权限即可解决。

至此,本文的文件共享和特权模式完毕,下来我们介绍下


转载请注明:http://www.aierlanlan.com/tzrz/1420.html