首页 > 解决方案 > 如何使用 Vue 和 Laravel 访问另一个 docker 卷文件?

问题描述

我在 docker 上运行一个Vue & Laravel项目。

项目结构和有关设置的所有内容

首先,我目前正在尝试在服务器上上传图像。
如果我在没有 docker 的情况下运行这个项目,它将按计划工作(文件正在上传到服务器并且可以访问)
但是,如果我用 docker 运行这个项目,它会抛出一个错误(找不到目录)

重要说明:我猜测它可能会发生,因为我正在处理后端的文件(laravel 控制器,代码在下面)。所以它只能访问后端卷。

它试图在前端卷中找到一个文件,但它无法访问它。
那么,问题来了:如何访问该卷?

文件控制器

    public function uploadFile (Request $request) {
        # Processing to base64
        $exploded = explode(',', $request->image_data);
        $decoded = base64_decode($exploded[1]);

        # Configuring the extension
        $extension = strtok(explode('/', $exploded[0])[1], ';');

        # Defining the path
        $path = '../../'.'frontend'.'/'.'src'.'/'.'assets'.'/'.'img'.'/'.'files'.'/'.$request->file_name;

        # Uploading file to the storage
        file_put_contents($path, $decoded);
    }

标签: laraveldockervue.jsdocker-volume

解决方案


你的路径在这里

$path = '../../'.'frontend'.'/'.'src'.'/'.'assets'.'/'.'img'.'/'.'files'.'/'.$request->file_name;

向上两步,然后进入frontend目录。backend但是您的容器中没有这样的目录。

backend:
  volumes:
    - ./backend:/app
    - ./etc/php:/usr/local/etc/php/local.conf.d/

最后两行安装在后端容器内bakendetc/php如您所见,没有前端,因此您在主机上使用的路径将不起作用。再添加一行来修复它:

backend:
  volumes:
    - ./backend:/app
    - ./etc/php:/usr/local/etc/php/local.conf.d/
    - ./frontend:/frontend  # this line

这将使前端目录出现在/frontend并且应该足以修复它。


推荐阅读