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

dokku - where is my application's directory

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

/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   

那些目录是什么(如果这是以前的应用推送,为什么我什至需要它们,我真的不想用它们淹没硬盘 space),其中哪个是目录我目前的 运行 个应用?

...mnt/...diff/ 中还有更多具有相似神秘名称的文件夹。

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

如果您想在应用程序容器中记录内容,您应该考虑以下可能性之一:

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

    docker run -v /var/log/myapplication:/path/to/app/in/container myimage
    
  2. 将您的日志写入 stdout,让 Docker 担心日志。您可以使用

    访问日志(是的,它只是一个大文件)
    docker logs <container-name>
    

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

  3. 使用外部日志记录服务将日志数据写入网络中的另一个位置。典型的候选人是 syslog (old-school) or setting up something like Logstash or Graylog.

@helmberts 的回答很好,给了你所有你需要的,我试着在菜里放一点盐(还有一些 dokku- 不是 docker 特定的)。

重点是,您的应用程序处于可恢复的开关环境中。通过部署 (git push),您可以设置祖先,每次启动应用程序后,您都会创建一个克隆,一旦您停止容器(有点)就会死亡。

你可以dokku run myapp ls /看看它的样子。 您可以进行更改 (dokku run myapp touch /mytouched.file),但这些不会持久化(dokku run 给您一个新的克隆!)并立即 "lost"。如果你想将文件永久保存在某个地方,请使用 volume 并将其安装到你的应用程序容器中。有一个很酷的plugin (dokku-volume)

我不能告诉你如何删除旧差异。