PHP无法在Docker容器中写入

5

我将尝试用Docker创建一个工作流程。

很简单:只是为了做一些小测试,使用PHP和MySQL。

我的docker-compose.yml文件如下:

web:
  build: .docker
  links:
    - mysql:mysql
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - ./public_html:/var/www/html
mysql:
  image: mysql:5.7
  environment:
    - MYSQL_ROOT_PASSWORD=root
  volumes:
    - "./.data/db:/var/lib/mysql"
phpmyadmin:
  image: phpmyadmin/phpmyadmin
  ports:
    - "8080:80"
  links:
    - mysql:mysql
  environment:
    - PMA_HOST=mysql
  volumes:
    - /sessions

这是我的Dockerfile文件:

FROM php:5.6-apache

RUN docker-php-ext-install mysqli

一切都没问题:我可以启动容器,但PHP本身无法写入目录(如fwrite()或类似的功能)。

我进行了大量研究并尝试了很多指导,但没有结果...


你能给我看一下你的PHP Dockerfile吗?我觉得这可能是一个权限问题导致的。 - Gabbax0r
我猜你是对的 @Gabbax0r,但我在Linux上还很新手... 我的Dockerfile已经有问题了,并且指向HUB中的php5.6-apache - Mário Valney
1个回答

8

Apache使用用户www-data来运行PHP,这个用户需要对您的主机目录./public_html具有写入权限。

要解决这个问题,请进入您的docker-compose目录,并执行以下命令来更改public_html目录及其所有文件的所有者:

sudo chown -R www-data:www-data public_html

接下来,您需要允许属于组“www-data”的用户编辑文件。

# To change all the directories to 775 
# (write for user & group www-data, read for others):
find public_html -type d -exec chmod 775 {} \;

# To change all the files to 664
# (write for user & group www-data, read for others):
find public_html -type f -exec chmod 664 {} \;

为了让当前用户编辑这些文件,您需要将其添加到 www-data 组中:

sudo usermod -aG www-data $USER

1
这是 chown -R - Mário Valney
我刚刚删除了所有内容,尝试使用您的解决方案创建一个新的存储库,并且成功了。谢谢@ChVuagniaux - Mário Valney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接