Docker:挂载卷的权限

5

我有这样一张图片,其中我从主机中挂载了一个卷

-v /Users/john/workspace:/data/workspace

在容器中,我使用的是不同于root用户的用户。现在的问题是它无法在/data/workspace内创建/修改文件(权限被拒绝)。现在我解决了这个问题,暂时在主机上执行chmod -R 777 workspace。有什么docker方式可以解决这个问题吗?

1个回答

5
这个问题可能可以通过用户映射(问题7198)解决,但是同样的线程包括以下内容:

使用新的dockerfile args解决了这个问题。它不需要在容器构建后做任何特殊处理,所以我想分享一下。(需要Docker 1.9)

在Dockerfile中:

# Setup User to match Host User, and give superuser permissions
ARG USER_ID=0
RUN useradd code_executor -u ${USER_ID} -g sudo
RUN echo 'code_executor ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
USER ${USER_ID} 

然后进行构建:
docker build --build-arg USER_ID=$(id -u)

那样,容器中的用户可以在已挂载的主机卷中写入内容(无需进行 chown/chmod 操作)。

非常感谢您的回答。但是似乎存在一个问题。尽管整个用户设置都有效,但容器内卷中的文件似乎具有不同的用户组所有者:1000:ftp,而不是jeanluca:staff。例如,如果我运行id -u,我会得到501。也许这与所有这些都在Mac上的virtualBox中运行有关。有什么建议吗? - Jeanluca Scaljeri
1
@JeanlucaScaljeri,那么您需要在Dockerfile中修改(usermod)用户,例如:https://github.com/dgraziotin/osx-docker-mysql/blob/master/run.sh#L12 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接