gpt4 book ai didi

docker - 写入共享卷 docker

转载 作者:IT老高 更新时间:2023-10-28 12:36:58 27 4
gpt4 key购买 nike

我有一个带有 php 应用程序的 docker

我有一个分享量,例如

/home/me/dev/site <=> /var/www/site

我可以在我的主机上写一些东西,它将与容器同步

如果我启动

sudo docker exec test touch /var/www/site/test.txt

有效

但是,如果我的服务器尝试将文件创建为 www-data,则由于权限问题,这将无法正常工作。

有没有办法让 www-data 访问我的共享卷?

我正在使用 boot2docker

最佳答案

Docker 中的(绑定(bind)挂载)卷将保持设置的权限Docker 主机本身。您可以使用它来设置这些权限在容器中使用它们之前的文件和目录。

一些背景;

Linux 中的权限基于用户和组ids ('uid'/'gid')。甚至尽管您看到用户和组名称作为所有者,但这些名称实际上并不是在 Linux 中很重要,它们只是为了让您更容易查看文件的所有者(它们是从 /etc/passwd 文件中查找的)。

您可以在文件上设置any uid/gid;设置这些权限时,用户不必存在。例如;

touch foobar && sudo chown 1234:5678 foobar && ls -la foobar

# UID and GID are set to 1234 / 5678, even though there's no such user
-rw-rw-r-- 1 1234 5678 0 Mar 25 19:14 foobar

检查权限(容器内外)

如上所述,Docker 在使用时维护主机的所有权一卷。此示例显示卷中的权限和所有权是同一个容器

# (First create a dummy site)

mkdir -p volume-example/site && cd volume-example
echo "<html><body>hello world</body></html>" > site/index.html

# Permissions on the Docker host;

ls -n site

# total 4
# -rw-rw-r-- 1 1002 1002 38 Mar 25 19:15 index.html

# And, permissions inside a nginx container, using it as volume;

sudo docker run --rm -v $(pwd)/site:/var/www nginx ls -n /var/www

# total 4
# -rw-rw-r-- 1 1002 1002 38 Mar 25 19:15 index.html

设置权限

如上所述,用户不一定要存在才能使用它们,所以即使我们在 Docker 主机上没有 www-data 用户,我们仍然可以设置正确的如果我们知道容器内该用户的“uid”和“gid”,则权限;

我们看看www-data用户的uid和gid在容器里面是什么;

sudo docker run --rm nginx id www-data

# uid=33(www-data) gid=33(www-data) groups=33(www-data)

在更改权限之前首先检查状态。这次我们以用户 www-data;

身份运行 nginx 容器
sudo docker run \
--rm \
--volume $(pwd)/site:/var/www \
--user www-data nginx touch /var/www/can-i-write.txt

# touch: cannot touch `/var/www/can-i-write.txt': Permission denied

接下来,设置本地目录的权限,看看能不能写;

sudo chown -R 33:33 site

sudo docker run \
--rm \
--volume $(pwd)/site:/var/www \
--user www-data nginx touch /var/www/can-i-write.txt

成功了!

关于docker - 写入共享卷 docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29245216/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com