PHP无法在docker容器中写入

Már*_*ney 5 docker dockerfile docker-compose

我正在尝试在 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
Run Code Online (Sandbox Code Playgroud)

还有我的Dockerfile

FROM php:5.6-apache

RUN docker-php-ext-install mysqli
Run Code Online (Sandbox Code Playgroud)

一切都很好:我可以启动容器,但 PHP 本身无法写入目录(类似fwrite()或类似的目录)。

我研究了很多,尝试了很多教程,但一无所获......

ChV*_*aux 8

Apache 与用户一起运行 PHP www-data,该用户需要对您的主机目录具有写权限./public_html

要解决此问题,请转到 docker-compose 目录并执行以下命令来更改public_html目录及其中所有文件的所有者。

sudo chown -R www-data:www-data public_html
Run Code Online (Sandbox Code Playgroud)

之后您需要允许“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 {} \;
Run Code Online (Sandbox Code Playgroud)

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

sudo usermod -aG www-data $USER
Run Code Online (Sandbox Code Playgroud)