我正在学习使用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错误日志?