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

时间:2015-05-05 17:54:41

标签: directory find docker dokku

我正在尝试访问应用程序目录中文件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   

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

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

2 个答案:

答案 0 :(得分:5)

请注意,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中的Docker运行时目录(通常为/var/lib/docker/containers/<container-id>/<container-id>-json.log)中找到日志文件。此日志文件不会自动轮换,因此可能会变大。

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

答案 1 :(得分:3)

@helmberts的答案非常棒并且可以满足您的所有需求,我尝试给菜肴添加一点盐(以及dokku-不是特定于码头工具的东西)。

关键是,您的应用程序处于可恢复的开关环境中。通过部署(java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/mina/filter/executor/OrderedThreadPoolExecutor; at org.apache.ftpserver.listener.nio.NioListener.<init>(NioListener.java:76) at org.apache.ftpserver.listener.ListenerFactory.createListener(ListenerFactory.java:90) at org.apache.ftpserver.impl.DefaultFtpServerContext.<init>(DefaultFtpServerContext.java:91) at org.apache.ftpserver.FtpServerFactory.<init>(FtpServerFactory.java:51) at com.ken.androidftpserver.MainActivity.onCreate(MainActivity.java:19) at android.app.Activity.performCreate(Activity.java:5958) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2474) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1359) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:155) at android.app.ActivityThread.main(ActivityThread.java:5696) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.mina.filter.executor.OrderedThreadPoolExecutor" on path: DexPathList[[zip file "/data/app/com.ken.androidftpserver-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) at java.lang.ClassLoader.loadClass(ClassLoader.java:469) at org.apache.ftpserver.listener.nio.NioListener.<init>(NioListener.java:76) at org.apache.ftpserver.listener.ListenerFactory.createListener(ListenerFactory.java:90) at org.apache.ftpserver.impl.DefaultFtpServerContext.<init>(DefaultFtpServerContext.java:91) at org.apache.ftpserver.FtpServerFactory.<init>(FtpServerFactory.java:51) at com.ken.androidftpserver.MainActivity.onCreate(MainActivity.java:19) at android.app.Activity.performCreate(Activity.java:5958) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2474) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1359) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:155) at android.app.ActivityThread.main(ActivityThread.java:5696) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) Suppressed: java.lang.ClassNotFoundException: org.apache.mina.filter.executor.OrderedThreadPoolExecutor at java.lang.Class.classForName(Native Method) at java.lang.BootClassLoader.findClass(ClassLoader.java:781) at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) at java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 19 more Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available ),您可以设置好祖先,每次启动应用程序后,都会创建一个在停止容器后死亡的克隆(种类)。

您可以git push查看它的外观。 您可以进行更改(dokku run myapp ls /),但这些更改不会保留(dokku run myapp touch /mytouched.file为您提供新的克隆!)和#34;丢失&#34;立即。如果您想永久保存文件,请使用并将其安装到app-container(s)中。对此有一个很酷的plugin (dokku-volume)

我无法告诉你如何删除旧的差异。