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 "$@"
运行 应用程序作为选定的用户。
当我 运行 一张 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 "$@"
运行 应用程序作为选定的用户。