dokku - 我的应用程序目录在哪里

Max*_*ari 5 directory find docker dokku

我正在尝试访问我的Node.js应用程序的日志,该日志写在mylogfile.log应用程序目录中的文件中.使用find / -type f -name mylogfile.logi能够看到此输出:

/var/lib/docker/aufs/diff/0303e86afdc58e13b5afcc07ea3694e0e9e6d5e5cf8530a0854a76fbe2baf574/app/mylogfile.log
/var/lib/docker/aufs/diff/a9a0dab44456acd8b43915ed686c282b778ab99df31f62076082e121274ef6e2/app/mylogfile.log
/var/lib/docker/aufs/mnt/0303e86afdc58e13b5afcc07ea3694e0e9e6d5e5cf8530a0854a76fbe2baf574/app/mylogfile.log   
Run Code Online (Sandbox Code Playgroud)

这些目录是什么(如果这是以前的应用程序推送,为什么我甚至需要它们,我真的不想用它们充斥硬盘驱动器的空间)以及哪些是我当前正在运行的应用程序的目录?

在内部...mnt/,...diff/还有更多具有类似神秘名称的文件夹.

hel*_*ert 5

请注意,用户无法从主机访问 Docker容器的文件系统.实际上它非常复杂,因为Docker使用分层的写时复制文件系统(在你的情况下就像AUFS一样,但是这是特定于发行版的;除了Ubuntu之外的大多数发行版使用Devicemapper而不是AUFS,IIRC).您看到的是文件系统层,每个包含与一个父层的差异.

如果要在应用程序容器中记录内容,则应考虑以下其中一种可能性:

  1. 将日志文件放入卷中.您可以将主机目录作为卷安装并在其中写入文件.您需要在创建容器时使用-vflag(-v <host-directory>:<dir in container>)指定挂载:

    docker run -v /var/log/myapplication:/path/to/app/in/container myimage
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将您的日志写入stdout,让Docker担心日志.您可以使用日志访问日志(是的,它只是一个大文件)

    docker logs <container-name>
    
    Run Code Online (Sandbox Code Playgroud)

    您还可以在Docker运行时目录(通常/var/lib/docker)中找到日志文件/var/lib/docker/containers/<container-id>/<container-id>-json.log.但是,此日志文件不会自动旋转,因此可能会变大.

  3. 使用外部日志记录服务将日志数据写入网络中的其他位置.典型的候选人将是系统日志(旧学校)或设置类似LogstashGraylog的东西.