如何以宿主机用户身份在Docker镜像中运行Wine?
Docker中以宿主机用户ID运行Wine时的权限问题
问题场景
我正在尝试在Docker容器中通过Wine运行.exe文件。为了让.exe的输出文件及容器内其他处理生成的文件归属正确,我用以下命令以宿主机系统用户ID运行Docker镜像:
docker run -it -u $(id -u):$(id -g)
但Wine无法运行任何程序,报错提示:
<dir>/.wine does not belong to you
原因是容器及其中所有文件都属于root用户。
我尝试修改WINEPREFIX目录的所有权,但没有效果;尝试将WINEPREFIX设置在宿主机用户和容器root都能访问的位置,却引发了其他问题。
我知道可以不使用宿主机ID运行镜像,但这会在后续流程中产生问题——容器输出的文件仍会属于root用户。
相关Dockerfile(含冗余代码)
FROM ubuntu:20.04 ENV CWD=/workdir ENV IMAGES=/images ENV OUTPUT=/output ENV WINEPREFIX=/workdir/.wine ARG USER_ID ARG GROUP_ID WORKDIR ${CWD} COPY files/sources.list /etc/apt/sources.list RUN mkdir ${IMAGES} && \ mkdir ${OUTPUT} && \ apt-get update && \ apt-get install -y --no-install-recommends file \ p7zip-full \ wine \ python3 && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # 尝试添加与宿主机uid/gid一致的用户 RUN groupadd -g ${GROUP_ID} myuser && \ useradd -l -u ${USER_ID} -g myuser myuser && \ chown -R -c ${USER_ID}:${GROUP_ID} /workdir COPY other-files COPY entrypoint files ENTRY ["entrypoint.sh"]
构建命令
docker build --build-arg USER_ID=$(id -u) \ --build-arg GROUP_ID=$(id -g) \ -t my-tag
chown操作似乎并未将目录所有权修改为指定的ID。
补充解决方案尝试
我甚至尝试在Dockerfile中创建一个独立目录并修改其权限,但同样无效(修改部分已标记为粗体):
FROM ubuntu:20.04 ENV CWD=/workdir ENV IMAGES=/images ENV OUTPUT=/output **ENV WINEPREFIX=/winedir/.wine** ARG USER_ID ARG GROUP_ID WORKDIR ${CWD} COPY files/sources.list /etc/apt/sources.list RUN mkdir ${IMAGES} && \ mkdir ${OUTPUT} && \ **mkdir /winedir** apt-get update && \ apt-get install -y --no-install-recommends file \ p7zip-full \ wine \ python3 && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # 尝试添加与宿主机uid/gid一致的用户 RUN groupadd -g ${GROUP_ID} myuser && \ useradd -l -u ${USER_ID} -g myuser myuser && \ chown -R -c ${USER_ID}:${GROUP_ID} **/winedir** COPY other-files COPY entrypoint files ...
内容的提问来源于stack exchange,提问作者stackoverflowuser1234
相关产品推荐
相关产品推荐

