lin*_*inz 11 linux permissions wordpress docker docker-compose
我尝试在 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
Run Code Online (Sandbox Code Playgroud)
当我构建 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
Run Code Online (Sandbox Code Playgroud)
现在我可以编辑文件了。但随后容器不再为网站提供服务。
解决此权限问题的正确方法是什么?
sau*_*ger 14
根据docker-compose和docker run参考,该user选项设置容器中运行的进程的用户 ID(和组 ID)。如果您将此设置为1000:1000,您的网络服务器将无法再绑定到端口 80。绑定到 1024 以下的端口需要 root 权限。这意味着您应该user: 1000:1000再次删除添加的语句。
要解决共享卷的权限问题,您需要更改目录的所有权。运行chown 1000:1000 /path/to/volume。这可以在容器内或直接在主机系统上执行。更改是持久的并立即生效(无需重新启动容器)。
一般来说,我认为卷应该在一个子目录中,例如
volumes:
- ./public:/var/www/html
Run Code Online (Sandbox Code Playgroud)
确保正确的用户拥有./public. 如果您启动容器并且该目录不存在,则 docker 会为您创建它。在这种情况下,该目录归所有人所有root,您需要按照上述说明手动更改所有权。
或者,您可以以非特权用户 ( user: 1000:1000)身份运行网络服务器,让服务器侦听端口 8080 并将路由更改为
ports:
- "8080:8080"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25302 次 |
| 最近记录: |