Py学习  »  docker

docker容器中的PHP file_put_contents()无法写入底层的ubuntu操作系统

John • 2 年前 • 1085 次点击  

我正在学习使用Docker来托管php应用程序。我试着做一个简单的 index.php 这将写一个 hello world test.txt 文件到我的底层ubuntu操作系统。但无论我做什么,我都会遇到很多问题。我从以下3个文件开始:

// ~/docker/docker-compose.yml
version: "3.8"
services:
  website:
    container_name: website
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - "80:80"
    volumes:
      - ../public_html:/var/www/html
    logging:
      options:
        max-file: "10"
        max-size: 10m

// ~/docker/Dockerfile
FROM php:5.4-apache

RUN chown -R www-data:www-data /var/www/html

CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

// ~/public_html/index.php

<?php file_put_contents('test.txt', 'hello world');

我使用以下“启动”命令启动项目:

john@localhost: sudo su
root@localhost: systemctl start docker
root@localhost: exit
john@localhost: sudo chown -R john:john ~/docker
john@localhost: sudo chown -R john:john ~/public_html
john@localhost: sudo chmod -R 755 ~/public_html
john@localhost: cd ~/docker
john@localhost: sudo docker-compose up --build -d;

用户 john sudo 特权。

当我访问我的网页时 http://192.168.0.10/index.php ,我看到错误消息

Warning: file_put_contents(test.txt): failed to open stream: Permission denied in /var/www/html/index.php on line 1

我可以通过在我的ubuntu主机上运行以下命令来解决这个问题:

touch ~/public_html/test.txt && chmod 777 ~/public_html/test.txt

但我真的想保留 755

我读到我必须保留所有 user ids 在我的主机ubuntu机器和来宾容器之间对齐。所以我尝试了一些方法,但每次尝试都会导致docker容器失败,甚至无法启动。这是我最近的一次尝试,同时出现了错误:

// ~/docker/.env
// when I did `id -u`, i saw the value 1000.  So I will assign it to an env variable
CURRENT_UID=1000

// ~/docker/docker-compose.yml
version: "3.8"
services:
  website:
    container_name: website
    user: ${CURRENT_UID}
    environment:
      CURRENT_UID: ${CURRENT_UID}
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - "80:80"
    volumes:
      - ../public_html:/var/www/html
    logging:
      options:
        max-file: "10"
        max-size: 10m

// ~/docker/Dockerfile
FROM php:5.4-apache

USER ${CURRENT_UID}:${CURRENT_UID}
RUN chown -R ${CURRENT_UID}:${CURRENT_UID} /var/www/html
RUN chown -R ${CURRENT_UID}:${CURRENT_UID} /etc/apache2
RUN chown -R ${CURRENT_UID}:${CURRENT_UID} /var/log/apache2
RUN chown -R ${CURRENT_UID}:${CURRENT_UID} /var/run/apache2

CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

当我运行“启动”命令时,容器无法启动。我做了一个 sudo docker logs website 它显示:

[Wed Jun 28 23:01:18.623744 2023] [core:error] [pid 7] (13)Permission denied: AH00099: could not create /var/run/apache2/apache2.pid
[Wed Jun 28 23:01:18.623918 2023] [core:error] [pid 7] AH00100: apache2: could not log pid to file /var/run/apache2/apache2.pid
Action '-D FOREGROUND' failed.
The Apache error log may have more information

有人能告诉我我做错了什么吗?有没有办法在容器出现故障后查看Apache错误日志?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/156853
 
1085 次点击  
文章 [ 1 ]  |  最新文章 2 年前