社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

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

John • 2 年前 • 1062 次点击  

我正在学习使用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
 
1062 次点击  
文章 [ 1 ]  |  最新文章 2 年前