如何从停靠的php应用程序登录到文件

如何从停靠的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

我有一个php应用程序停靠。 我的问题是如何将php服务中的错误捕获到主机上的专用文件中。 docker文件看起来是下一个:

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: {}

我的目的是使用php
error\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