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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过php访问docker容器内的文件相关的知识,希望对你有一定的参考价值。

我在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容器内的文件?

答案

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

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

获取您可以运行的containerId

docker ps
另一答案

如果我理解正确,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容器的重启/崩溃中持续存在,我认为这很重要......

以上是关于通过php访问docker容器内的文件的主要内容,如果未能解决你的问题,请参考以下文章

docker 怎么把宿主机的文件拷贝到运行的容器中

无法访问 docker 容器内的烧瓶应用程序

Docker - 无法通过脚本删除容器内的文件

7.Docker技术入门与实战 --- 端口映射与容器互联

无法连接到 Docker 容器内的 MongoDB

docker mysql 容器 数据库文件怎么娴宿主机器上