我有一个 Docker 映像,当发生错误时它会生成类似日志的文件。我已使用绑定安装将其写入的目录安装到我的主机上。但是,创建的文件归root
.尽管我的用户帐户具有 root 权限,但每次运行容器chown
后chgrp
检查文件都非常繁琐。
有没有办法让容器将文件的所有者和组设置为运行容器的用户的所有者和组?
对于某些上下文,这是我创建的一个玩具示例:
Dockerfile
FROM debian
WORKDIR /root
VOLUME /root/output
COPY run.sh /root/
ENTRYPOINT ["./run.sh"]
运行sh
#!/bin/bash
echo hello > output/dump
我的执行命令是
docker run -v $PWD/output:/root/output test
答案1
这些文件由在容器内运行的用户创建。如果您的容器化命令以 运行root
,则所有文件都将以 root 身份创建。
如果您希望以其他用户身份创建文件,请以该其他用户身份运行容器。例如
docker run -v "$(pwd)/output":/root/output -u $(whoami) test
注意:根据您的容器,这可能无法开箱即用(例如,因为在容器内,您需要打开特权端口,或者您的脚本只能由给定(超级)用户访问)。
答案2
这是一个老已知错误。作为一种解决方法,人们可以使用波德曼,它与 Docker 兼容,他们甚至建议添加一个alias docker=podman
.此处问题的一个优点是 Podman 不需要以 root 身份运行的服务。它不仅有利于安全,而且实际上可以避免这样的错误。
示范:
$ ls -l /tmp/hello
ls: cannot access 'hello': No such file or directory
$ podman run --rm -v /tmp/:/mnt/ -it ubuntu:22.04 sh -c "touch /mnt/hello && ls -l /mnt/hello"
-rw-r--r--. 1 root root 0 Sep 26 03:57 /mnt/hello
$ ls -l /tmp/hello
-rw-r--r--. 1 konstantin konstantin 0 сен 26 06:57 hello