Docker 卷和主机权限

Docker volume and host permissions

当我 运行 一张 docker 图像时喜欢

docker run -v /home/n1/workspace:/root/workspace -it rust:latest bash

然后我在容器中创建一个目录,如

mkdir /root/workspace/test

它在我的主机上归 root 所有。这导致我每次关闭容器后都必须更改权限才能使用该目录进行操作。

有没有办法告诉 Docker 在特定用户下从我的机器(主机)的角度处理目录和文件?

当然可以,因为 Docker 使用 root 作为默认用户。您应该在 docker 容器中创建用户,切换到该用户,然后创建文件夹,然后您将在主机上没有 root 权限的情况下获得它们。

Dockerfile

FROM rust:latest
...
RUN useradd -ms /bin/bash myuser
USER myuser

您需要 运行 您的应用程序在容器内的 uid 与您在主机上的 uid 相同,才能使文件所有权相匹配。我自己的解决方案是以 root 身份启动容器,调整容器内用户的 uid 以匹配卷装载,然后 su 到用户 运行 应用程序。可以在此 repo 中找到相关脚本:https://github.com/sudo-bmitch/docker-base

在那个 repo 中,fix-perms 脚本处理容器内 uid/gid 中的更改,入口点脚本有一个 exec gosu $username "$@" 运行 应用程序作为选定的用户。