如何从停靠的php应用程序登录到文件
我有一个php应用程序停靠。 我的问题是如何将php服务中的错误捕获到主机上的专用文件中。 docker文件看起来是下一个:如何从停靠的php应用程序登录到文件,php,docker,error-logging,Php,Docker,Error Logging,我有一个php应用程序停靠。 我的问题是如何将php服务中的错误捕获到主机上的专用文件中。 docker文件看起来是下一个: version: "3.9" services: web: image: nginx:latest ports: - "3000:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./public:/public
version: "3.9"
services:
web:
image: nginx:latest
ports:
- "3000:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./public:/public
php:
build:
context: .
dockerfile: PHP.Dockerfile
environment:
APP_MODE: 'development'
env_file:
- 'dev.env'
volumes:
- ./app:/app
- ./public:/public
- ./php.conf:/usr/local/etc/php-fpm.d/zz-log.conf
mysql:
image: mariadb:latest
environment:
MYSQL_ROOT_PASSWORD: <pass here>
env_file:
- 'dev.env'
volumes:
- mysqldata:/var/lib/mysql
- ./app:/app
ports:
- '3306:3306'
volumes:
mysqldata: {}
我的目的是使用phperror\u log()
函数,并将所有日志记录在php error.log
中,这是卷app
中的一个文件。
现在,来自容器的所有日志仅显示在终端上
我已经挣扎了几个小时,不知道如何继续下去。谢谢我不知道你的源图像是什么。我假设有一些PHP的官方docker图像,比如 所有容器化应用程序通常配置为登录到
stdout
,因此您必须覆盖该行为。这是真正的PHP特定的,我不是PHP专家。从您告诉我们的情况来看,您似乎知道如何覆盖该行为(通过使用一些error\u log()
函数和php\u admin\u值[error\u log]=/app/php error.log
属性)
如果该行为被重写,则应确保php容器中存在文件app/php error.log
(即,通过类似于docker exec-it my container id/bin/bash
的方法进入容器,然后执行ls/app/php error.log
和cat/app/php error.log
以查看是否创建了文件
因为您正在将主机中的
/app
目录装载到容器中的/app
目录,所以您已经对它们进行了镜像。无论容器的/app
中有什么内容,您都可以在/path/to/docker/compose/app
目录中找到。您可以检查文件是否存在,以及其中是否有一些内容。如果没有,您可以查看led会覆盖PHP登录位置的默认行为。您能给我们提供更多信息吗?您能登录到该文件吗?一段时间后…完成。容器PHP'会将错误定向到stderr
[global]error_log=/proc/self/fd/2`因此,我重写了将名为'zz my.conf'[global]的文件放在'php fpm.conf.d'目录中的指令error_log=/app/php-error.log
php_admin_value[error_log] = /app/php-error.log
php_admin_flag[log_errors] = on
catch_workers_output = yes