gpt4 book ai didi

linux - Docker 组成卷权限 linux

转载 作者:太空宇宙 更新时间:2023-11-04 09:12:48 24 4
gpt4 key购买 nike

我尝试在 docker 容器中运行 wordpress 我的 docker-compose.yaml 文件是:

version: "2"
services:
my-wpdb:
image: mariadb
ports:
- "8081:3306"
environment:
MYSQL_ROOT_PASSWORD: ChangeMeIfYouWant
my-wp:
image: wordpress
volumes:
- ./:/var/www/html
ports:
- "8080:80"
links:
- my-wpdb:mysql
environment:
WORDPRESS_DB_PASSWORD: ChangeMeIfYouWant

当我构建 docker 结构时,该卷已挂载但属于 root。

我试图改变它:

my-wp:
image: wordpress
user: 1000:1000 # added
volumes:
- ./:/var/www/html
ports:
- "8080:80"
links:
- my-wpdb:mysql
environment:
WORDPRESS_DB_PASSWORD: ChangeMeIfYouWant

现在我可以编辑文件了。但是随后容器不再为该网站提供服务。

解决此权限问题的正确方法是什么?

最佳答案

根据docker-composedocker run引用,user 选项设置容器中运行的进程的用户 ID(和组 ID)。如果您将此设置为 1000:1000,您的网络服务器将无法再绑定(bind)到端口 80。绑定(bind)到 1024 以下的端口需要 root 权限。这意味着您应该再次删除添加的 user:1000:1000 语句。

要解决共享卷的权限问题,您需要更改目录的所有权。运行 chown 1000:1000/path/to/volume。这可以在容器内或直接在主机系统上执行。更改是持久的并立即生效(不需要重新启动容器)。

一般来说,我认为卷应该在一个子目录中,例如

  volumes:
- ./public:/var/www/html

确保正确的用户拥有 ./public。如果您启动容器并且该目录不存在,docker 会为您创建它。在这种情况下,该目录归 root 所有,您需要如上所述手动更改所有权。


或者,您可以以非特权用户(user:1000:1000)运行网络服务器,让服务器监听端口 8080 并将路由更改为

 ports:
- "8080:8080"

关于linux - Docker 组成卷权限 linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52917695/

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