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).您看到的有 文件系统层 ,每个层都包含与一个父层的差异。
如果您想在应用程序容器中记录内容,您应该考虑以下可能性之一:
将您的日志文件放入 卷。您可以将主机目录挂载为卷并在其中写入文件。创建容器时需要指定挂载,使用-v
标志(-v <host-directory>:<dir in container>
):
docker run -v /var/log/myapplication:/path/to/app/in/container myimage
将您的日志写入 stdout,让 Docker 担心日志。您可以使用
访问日志(是的,它只是一个大文件)
docker logs <container-name>
您还可以在 /var/lib/docker/containers/<container-id>/<container-id>-json.log
的 Docker 运行时目录(通常是 /var/lib/docker
)中找到日志文件。但是,此日志文件不会自动轮换,因此它可能会变大。
使用外部日志记录服务将日志数据写入网络中的另一个位置。典型的候选人是 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)。
我不能告诉你如何删除旧差异。
我正在尝试访问我的 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).您看到的有 文件系统层 ,每个层都包含与一个父层的差异。
如果您想在应用程序容器中记录内容,您应该考虑以下可能性之一:
将您的日志文件放入 卷。您可以将主机目录挂载为卷并在其中写入文件。创建容器时需要指定挂载,使用
-v
标志(-v <host-directory>:<dir in container>
):docker run -v /var/log/myapplication:/path/to/app/in/container myimage
将您的日志写入 stdout,让 Docker 担心日志。您可以使用
访问日志(是的,它只是一个大文件)docker logs <container-name>
您还可以在
/var/lib/docker/containers/<container-id>/<container-id>-json.log
的 Docker 运行时目录(通常是/var/lib/docker
)中找到日志文件。但是,此日志文件不会自动轮换,因此它可能会变大。使用外部日志记录服务将日志数据写入网络中的另一个位置。典型的候选人是 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)。
我不能告诉你如何删除旧差异。