【问题标题】:unable to create files from linux library via php无法通过 php 从 linux 库创建文件
【发布时间】:2021-03-04 07:58:48
【问题描述】:

我有一个可以在 docker 上运行的 php 应用程序。我想将一个命令从 php 代码发送到应该创建文件的容器(some_dir/certs/cert.crt 等)。这个命令我是这样运行的(通过 system/exec/shell_exec 或 symfony/process)

system("traefik-certs-dumper file --source acme.json --dest some_dir --version v2");

当 php 运行此代码时,已创建目录但未创建文件,我也没有任何错误。 当我通过docker exec 从终端而不是从 php 进行此命令时,此命令有效。这可能是 php 和 docker 容器之间的一些权限问题,但我不知道如何设置它。 我正在尝试在 docker 文件中进行设置,但无法正常工作:

RUN chmod 777 /go/bin/traefik-certs-dumper
RUN usermod -u 1000 www-data

标准命令也是这样工作的:

system("mkdir -p some_dir_1234");
system("touch some_dir_1234/some_file_1234");

如何允许已安装的库创建文件?

【问题讨论】:

  • 日志中是否有任何错误,这将有助于理解为什么没有创建文件。
  • 没什么特别的。系统函数返回 0。没有错误
  • 您是否尝试过使用 exec() 查看输出 - 类似于 exec("traefik-certs-dumper file --source acme.json --dest some_dir --version v2", $output); print_r($output);
  • @NigelRen 输出包含 array ( 0 => 'some_dir', 1 => '├──certs', 2 => '└──private', ) 所以只有命令创建的目录,但没有我需要的证书文件

标签: php docker permissions command


【解决方案1】:

我终于找到了解决办法。在一个单独的容器中,我运行了一个进程主管,他看到了这个文件,因为它也被挂载到主应用程序目录。要做的是将文件挂载到主容器和主管容器。

【讨论】:

    【解决方案2】:

    试试

    exec("traefik-certs-dumper file --source acme.json --dest some_dir --version v2");
    

    在 system() 之前

    【讨论】:

    • exec 和 shell_exec 也无济于事
    猜你喜欢
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多