Docker看不到Laravel创建的文件

时间:2019-11-27 10:34:58

标签: linux laravel docker

我在Linux机器上托管了Docker,Docker运行了Laravel项目

我需要将文件存储在var/log中,我将检查var/log是否包含logBackups文件夹,如果不存在,我将创建logBackups文件夹,然后我将文件存储在logBackups文件夹中。最终路径将为var/log/logBackups/myfile.zip

从代码中我看到logBackups文件夹中的文件,但是我看不到Docker本身的文件,我转到var/log然后写ls列出文件,但是该文件夹不存在,我找不到文件。

如果我在托管计算机的根文件夹中使用find -iname myFile*.zip搜索,则会在以下位置找到文件 ./var/lib/docker/aufs/diff/6ce08dbaede64ed42b8e44c0bd9ec60ee6c5843a8c4ecc977aaacb4af7ffddee/var/log/logBackups/myfile.zip 和下 ./var/lib/docker/aufs/mnt/6ce08dbaede64ed42b8e44c0bd9ec60ee6c5843a8c4ecc977aaacb4af7ffddee/var/log/logBackups/myfile.zip

当将数据存储在/var/log下时,Laravel项目代码似乎使用了会话

我如何才能从Docker本身找到文件,并迫使laravel项目使用Docker看到的相同文件夹?

用于运行项目的命令为docker-compose -p projectname up -d

Dockerfile

FROM php:7.1-fpm
RUN apt-get update && apt-get install -y sendmail libmcrypt-dev libpng-dev git-all zlib1g-dev \
    && docker-php-ext-install mcrypt zip pdo_mysql opcache

#Speed PHP
RUN echo "file_uploads = On\n" \
         "memory_limit = 1024M\n" \
         "upload_max_filesize = 50M\n" \
         "post_max_size = 50M\n" \
         "max_execution_time = 600\n" \
         > /usr/local/etc/php/conf.d/uploads.ini


ADD dockerscriptetchosts.sh /home/dockerscriptetchosts.sh

RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer

WORKDIR /var/www
ADD . /var/www

RUN chown -R www-data:www-data /var/www
RUN chown -R www-data:www-data /var/log

由Docker编写的yml文件

version: '2'
services:
    web:
        build:
            context: ./
            dockerfile: web.docker
        volumes:
            - ./:/var/www
        ports:
            - "9080:80"
        links:
            - app
    app:
        build:
            context: ./
            dockerfile: app.docker
        volumes:
            - ./:/var/www
            - /var/log:/var/www/shared_log
        environment:
            - "APP_ENV=local"

1 个答案:

答案 0 :(得分:0)

如果要直接读取主机系统中容器产生的内容,则需要使用绑定安装的卷将主机目录安装到容器中。永远不要直接访问/var/lib/docker中的内容:这是一种特定于安装的复杂格式,如果弄错了,您可能会破坏容器或整个Docker中的文件系统。

您显示的docker-compose.yml文件将主机的/var/log目录安装到应用程序目录的子目录上;这有点不寻常,可能不是您想要的。您想要volumes:声明更像

volumes:
  - ./webLog:/var/log