前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在docker容器中使用非root用户执行脚本 (

在docker容器中使用非root用户执行脚本 (

作者头像
双面人
发布2019-10-24 11:19:59
2K0
发布2019-10-24 11:19:59
举报
文章被收录于专栏:热爱IT热爱IT热爱IT

应用容器化之后,在docker容器启动时,默认使用的是root用户执行命令,因此容器中的应用默认都是使用root用户来运行的,存在很高的安全风险,那么如何能够使用非root的业务用户来运行应用呢,下面我将举一个简单的例子来说明。该例子是在容器中使用自建的用户来运行一个简单的shell脚本,并将脚本输出日志持久到容器外部。接下来让我们来看从制作镜像到容器运行的全过程吧。 1、构建镜像: 我将会使用dockerfile的方式来构建镜像,基础镜像使用ubuntu 14.04(需要先拉取该镜像,docker pull ubuntu:14.04)。dockerfile内容如下 [root@host09 test]# cat Dockerfile FROM docker.io/ubuntu:14.04   MAINTAINER hepengfei RUN groupadd hpf  --创建用户组 RUN useradd -d /data -g hpf -m hpf   --创建用户 RUN su - hpf -c "mkdir -p /data/scripts"  RUN su - hpf -c "mkdir -p /data/logs" WORKDIR /data/scripts COPY test.sh /data/scripts/ RUN chown hpf:hpf test.sh RUN chmod 755 test.sh ENTRYPOINT su - hpf -c "/data/scripts/test.sh" --使用所创建的用户来运行脚本 [root@host09 test]#

脚本内容如下:

[root@host09 test]# cat test.sh while [ 1 = 1 ] do echo `id` >>/data/logs/hpf.log  --将日志输出到文件,启动容器的时候做持久化 sleep 1 done [root@host09 test]#

接下来让我们来构建镜像:

[root@host09 test]# docker build -t hpf:v2 . Sending build context to Docker daemon 3.072 kB Step 1 : FROM docker.io/ubuntu:14.04  ---> c69811d4e993 Step 2 : MAINTAINER hepengfei  ---> Using cache  ---> b8401d2eb439 Step 3 : RUN groupadd hpf  ---> Using cache  ---> 2e0d20802c41 Step 4 : RUN useradd -d /data -g hpf -m hpf  ---> Using cache  ---> bac36ee97aba Step 5 : RUN su - hpf -c "mkdir -p /data/scripts"  ---> Using cache  ---> a92c3f5f8e34 Step 6 : RUN su - hpf -c "mkdir -p /data/logs"  ---> Using cache  ---> 2e8665da7092 Step 7 : WORKDIR /data/scripts  ---> Using cache  ---> 7cf84a5a8aca Step 8 : COPY test.sh /data/scripts/  ---> 7e4c24de2096 Removing intermediate container f96358d91c35 Step 9 : RUN chown hpf:hpf test.sh  ---> Running in fc9ab290c56c  ---> f38afd1ea62c Removing intermediate container fc9ab290c56c Step 10 : RUN chmod 755 test.sh  ---> Running in a35b507a1527  ---> 5b5223249f4c Removing intermediate container a35b507a1527 Step 11 : ENTRYPOINT su - hpf -c "/data/scripts/test.sh"  ---> Running in 1ee7cc7fbec7  ---> 26e7d603dbac Removing intermediate container 1ee7cc7fbec7 Successfully built 26e7d603dbac [root@host09 test]#

查看所构建的镜像:

[root@host09 test]# docker images REPOSITORY         TAG                IMAGE ID           CREATED            SIZE hpf                v2                 26e7d603dbac       42 minutes ago     188.3 MB docker.io/ubuntu   14.04              c69811d4e993       3 weeks ago        188 MB [root@host09 test]#

2、启动容器:

注意,在启动容器之前,需要将宿主机上/data/hepf/log目录的权限,否则容器启动时,脚本中的日志将没有权限写该目录,我直接将该目录权限修改成777了。

[root@host09 test]# chmod 777 /data/hepf/log

[root@host09 test]# docker run -it -v /data/hepf/log:/data/logs hpf:v2

现在来查看/data/hepf/log目录中的日志文件:

[root@host09 log]# pwd /data/hepf/log [root@host09 log]# ll total 12 -rw-rw-r-- 1 1000 1000 10800 Sep  7 08:02 hpf.log [root@host09 log]# tail -2 hpf.log uid=1000(hpf) gid=1000(hpf) groups=1000(hpf) uid=1000(hpf) gid=1000(hpf) groups=1000(hpf) [root@host09 log]#

可以看到,该文件的属主跟容器中创建的hpf用户是一致的:

hpf@ba688af3f598:~$ id uid=1000(hpf) gid=1000(hpf) groups=1000(hpf) hpf@ba688af3f598:~$

如果宿主机上已有其他用户跟容器中创建用户的id一样的话,宿主机上的日志文件属主就会变成该用户,但是暂时没有发现什么问题。

[root@host09 log]# cat /etc/passwd |grep hpf1 hpf1:x:1000:1000::/data1:/bin/bash[root@host09 log]# ll total 12 -rw-rw-r-- 1 hpf1 hpf1 11250 Sep  7 08:50 hpf.log [root@host09 log]#

简单的例子到这里就结束了。

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档