我有两个Dockerfile
FROM alpine
WORKDIR /test
RUN touch abc.txt
USER 1001第一个构建得很好
docker build -t myimage:foo。
FROM myimage:foo
WORKDIR /foo
RUN touch def.txt
USER 0当我尝试构建第二个时,我得到一个错误。触控def.txt上的权限被拒绝。
为什么?
发布于 2020-12-10 06:42:59
如果我错了,也许有人能纠正我
在第一个示例中,用户设置为1001,即您正在运行它的应用程序用户,但在第二个示例中,该用户不是您,并且该用户/uid无权更改文件夹foo和文件def.txt中的文件
发布于 2020-12-10 13:26:22
与将使用父基础映像的USER的RUN mkdir /bar不同,WORKDIR /foo将使用下一个身份来设置文件夹,这意味着文件夹的所有者是root,详细信息请参阅this(TLDR):
// RootPair returns a uid and gid pair for the root user. The error is ignored
// because a root user always exists, and the defaults are correct when the uid
// and gid maps are empty.
func (i *IdentityMapping) RootPair() Identity {
uid, gid, _ := GetRootUIDGID(i.uids, i.gids)
return Identity{UID: uid, GID: gid}
}因此,对于您的下一段代码:
WORKDIR /foo
RUN touch def.txtWORKDIR使用根目录权限设置foo,而RUN touch尝试使用1001帐户在根目录拥有文件夹中设置文件,这肯定会失败。
对于您的情况,您可以按照下一步操作:
FROM myimage:foo
WORKDIR /foo
USER 0
RUN chmod 777 /foo
USER 1001
RUN touch def.txt
USER 0https://stackoverflow.com/questions/65225925
复制相似问题