Docker通过ENTRYPOINT完成用户自动创建和切换

本文探讨了如何在Docker容器启动时避免使用默认的root用户,而是通过ENTRYPOINT指令根据指定的用户名和组名自动创建并切换用户。内容涉及到Dockerfile的CMD和ENTRYPOINT指令的使用,以及通过ENTRYPOINT的参数传递实现用户管理的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要接收怎么通过DockerfileEntryPoint做到,容器启动后的登录用户不是root,而是用户通过docker run参数指定的用户名和组名

本文的背景

这篇文章源自我上周工作中遇到的一个问题,我在k8s中通过docker启动jupyterlab服务,但是发现每次docker每次启动容器后的用户都默认是root,这不利于权限控制和用户管理。

所以,我就想:是否控制用户启动容器后的登录用户呢? 周末在家好好学习了下怎么通过Dockerfile对镜像进行定制,并通过EntryPoint指令完成了上诉的功能,现分享给大家,希望对大家有帮助。
 

问题分析

如果你对docker相关技术比较熟悉的化,你应该首先会想到docker run --users或者在Dockerfile中通过USER指令来完成,但这两种方式都有个缺陷:就是我必须提前创建好用户和用户组。

如果你docker的使用还有上层应用的化,那倒还好,你可以提前创建好用户和用户组,或者容器启动后手动切换到其他用户。

但是,如果我仅仅想通过docker run的方式启动,启动后便自动完成创建和切换的工作呢?例如我就是通过docker启动notebook(一种基于web的交互式编程服务),我想用户在notebook terminal中登录的用户是自己而不都是root

了解docker的同学应该知道,docker是定制镜像,一般是先编写Dockerfile,然后build成镜像,最后基于这个镜像通过docker run启动容器。

所以,现在问题关键就是:怎么通过docker run后面跟一些参数传入用户名和组名,然后容器启动的时候,能够得到指定的用户名和组名,完成用户和组的创建,并切换到此用户?
 

CMD和ENTRYPOINT指令

Dockerfile是通过一系列的指令,从某个基础镜像出发,加上自己定制的功能,完成定制镜像的工作。下面的代码就是一个简单的例子,它基于nginx镜像进行扩展,添加一个html文件,然后启动nginx服务。

FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值