Dockerfile: unable to find user xxx : no matching entries in passwd file解决方案

在构建Docker镜像时,使用USER指令切换到非root用户可能出现找不到用户的问题,报错'Error response from daemon: unable to find user: no matching entries in passwd file.'。解决方法是在RUN指令中先创建用户,如RUN useradd -s /bin/bash your_user_name。虽然使用USERID可以避免错误,但在容器内可能无法执行某些操作。在Windows上,创建用户需要通过RUN netuser /add 命令。注意,USER指令未指定组时,会默认使用root组。

报错信息

在制作Docker镜像的过程中,完成软件安装等操作后,一般会切换为普通用户启动相应的服务,就需要用到USER指令。但有时候这个指令会报错:

docker: Error response from daemon: unable to find user : no matching entries in passwd file.

解决方案

如果遇到这个问题,可以在使用USER指令之前,先创建用户。

RUN useradd -s /bin/bash your_user_name

网上有很多其他的方案,其中一个是使用USER ID代替用户名,的确可以成功,但是进入容器后,会是普通用户权限,很多操作都执行不了,如果容器是用来开发和调试的,就不太方便了。

相关知识

Docker官方文档中关于USER指令的说明。

USER <user>[:<group>]

或者

USER <UID>[:<GID>]

The USER instruction sets the user name (or UID) and optionally the user group (or GID) to use when running the image and for any RUN, CMD and ENTRYPOINT instructions that follow it in the Dockerfile.

“USER”指令设置运行映像时要使用的用户名(或UID)和可选的用户组(或GID),“Dockerfile”中紧随其后的任何“RUN”、“CMD”和“ENTRYPOINT”指令都将用该用户执行。

请注意,当为用户指定组时,用户将只有指定的组成员资格。任何其他配置的组成员身份都将被忽略。

需要注意

当用户没有指定组时,镜像(或下一条指令)将在root组运行。

在容器中创建Windows用户的方法

在Windows上,如果用户不是内置帐户,则必须首先创建该用户。这可以通过在Dockerfile中调用net user命令来完成。

RUN net user /add Patrick

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值