通过php访问docker容器内的文件

时间:2018-04-05 13:10:25

标签: php docker jboss shell-exec restcomm

我在docker上有jboss服务器,我试图检查php是否保存了音频文件。如果文件存在,我想将其复制到本地计算机。

  $location = shell_exec('docker exec -it  name3 /bin/bash -c cd .**********; ls');
  $filepath = $location;
  if (file_exists($filepath)) {
       //copy that file to local machine 
   } 
  echo $filepath;

但是对于$ location我在htdocs(xampp)中找到了文件夹。是否可以通过php(在本地服务器上)访问docker容器内的文件?

2 个答案:

答案 0 :(得分:1)

您可以使用docker cp告诉docker将容器中的文件从容器复制到本地计算机

docker cp <containerId>:/file/path/within/container /host/path/target

获取您可以运行的containerId

docker ps

答案 1 :(得分:0)

如果我理解正确,PHP正在您的本地计算机上运行,​​并且您想检查运行的docker容器中是否存在文件。

无论PHP是否可以访问doc根目录之外的文件系统部分,或者它是否有权执行shell命令(两者都是安全问题),我仍然会使用不同的方法。

  • 使用docker volume存储录音。
  • 将卷安装在您正在检查的路径上 - 即/opt/Restcomm-JBoss-AS7/standalone/deployments/restcomm.war/recordings/
  • 将docker卷的主机路径设置在PHP对文件系统具有读取权限的位置
  • 使用PHP检查文件是否存在,而不使用任何shell命令。例如https://secure.php.net/manual/en/function.file-exists.php

请注意,这样您的录制文件也会在Docker容器的重启/崩溃中持久,我认为这很重要......