【问题标题】:docker run with volume changes directory permission to rootdocker run with volume 将目录权限更改为root
【发布时间】:2016-11-16 22:01:49
【问题描述】:

当我运行 docker image 时,我挂载的 artifacts 目录获得了 root 权限。 我希望工件具有与用户相同的权限。 是否可以在运行 docker 映像时将用户作为参数传递,以便创建具有特定用户权限的工件目录?

这就是我运行 docker 的方式:

docker run --cap-add SYS_ADMIN --security-opt apparmor:unconfined -it -v /home/artifacts:/artifacts dock_img

drwxr-xr-x  2 root   root   4.0K Nov 16 13:58 artifacts

由于此工件获得了 root 权限,我无法通过我的用户登录对其进行处理。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: docker docker-compose dockerfile docker-machine


    【解决方案1】:

    这是因为你在容器内使用了root用户。

    您可以使用-u 参数来设置您在外部使用的用户(例如-u `id -u $USER`),但是如果您需要在容器内获得root,则必须手动chown。

    【讨论】:

    • 我尝试在运行 docker 时添加 -u $USER 但它给出错误:无法找到用户 FATA [0000] 来自守护进程的错误响应:无法启动容器 7bc5461c4d04cd42f9f5b54c9213bdb44bfc2841454953ac66ae64c0cdc4a53d:[8] 系统错误:无法启动查找用户。我没有在 dockerfile 中添加任何 USER,如果不在 dockerfile 中添加 USER,-u 选项会起作用吗?
    • 是的,它应该可以工作,但您的控制台似乎不支持反引号中的子命令。尝试直接使用uid
    • 现在我得到不同的名称错误:root@onl-dev:/data/sept15/target-docker# docker run -u -it x docker: 来自守护进程的错误响应:linux规范用户:找不到用户 :passwd 文件中没有匹配的条目。但我看到了条目:root@onl-dev:/data/sept15/target-docker# cat /etc/passwd | grep :x:1012:1012:,,,:/home/:/bin/bash
    • 我也尝试使用 uid 运行:“docker run -u 1004 -it -v /home/artifacts:/artifacts temp”,但它仍然使用根目录创建工件文件夹:“drwxr-xr-x 2 root root 4.0K Nov 16 19:26 artifacts"
    • -u 的问题似乎是容器内不存在用户。因此,您必须使用 useradd chown 或创建用户,如果这样做,您还可以使用 USER 指令。
    猜你喜欢
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    相关资源
    最近更新 更多