繁体   English   中英

使用 php 将文件从 docker 容器移动到同一服务器上的外部文件夹

[英]Move files from a docker container to an outside folder on the same server using php

我对 docker 还很陌生,如果这是一个基本问题,请多多包涵。 我在服务器上有一个 laravel 项目,该项目是 dockerized。 我想要做的是将文件从我的项目移动到同一台服务器上未 dockerized 的另一个位置。

因此,我的项目设置在/var/www/my-project目录上,我想将文件从my-project/storage/app/public/file.csv/var/{destination_folder} 我该如何在 laravel 中做到这一点? 我认为我的问题与 laravel 无关,它与不允许将文件移出的 docker 相关。 请不要添加 laravel 或 php 文件复制代码片段,我已经尝试了很多。

我试过什么?

1-我尝试使用以下方法复制文件:

 Storage::disk('local')->put('/var/{destination_folder}', 'my-project/storage/app/public/file.csv' )

但是,它不会复制文件。

2-我也尝试使用 bash 脚本移动文件,我正在使用shell_execprocess从 laravel controller 执行该脚本,但它也不起作用。

 cp "/var/www/my-project/storage/app/public/file.csv" "/var/destination_folder"

这个解决方案的亮点是,当我从终端运行命令时它正在工作,但是当我从 controller 调用它时它不起作用,它给了我

cp: cannot create regular file '/var/destination_folder/file.csv': No such file or directory

在谷歌搜索上述错误之后,这似乎是一个权限问题,我将目标文件夹的权限更改为 775,我还检查了运行whoami应用程序的用户,当我从应用程序。

让我知道如何实现这一点,谢谢

docker的整点是它与base主机隔离。 您不能简单地将文件复制出来,因为 docker 主机无法访问任何未安装的磁盘。

最简单的选择是根据https://docs.docker.com/storage/bind-mounts/创建目标目录并创建绑定挂载

然后,您将为 docker 运行使用以下参数:--mount type=bind,source=/var/destination_folder,target=/some_directory_inside_your_docker 并将文件复制到 some_directory_inside_your_docker,它将出现在父主机中。

另一种选择是在父主机上生成一个用户帐户,出于安全原因将其锁定,然后在您的 docker 中有一个私钥,这将允许您的 docker 到 Z765553E6C7AC8592C389ACB9878A每个网络配置)。 我认为当您可以进行绑定安装时这不是一个好主意,但它起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM