【问题标题】:Dokku/Docker, how to access file in file system of running container?Dokku/Docker,如何访问正在运行的容器文件系统中的文件?
【发布时间】:2016-08-30 00:11:18
【问题描述】:

以前,要访问正在运行的 dokku 实例中的文件,我会运行: docker ps 获取容器 ID 后跟 ls /var/lib/docker/aufs/diff/<container-id>/app/... 注意:我只是使用 'ls' 作为示例命令。我最终想引用一个特定的文件。

这一定已经改变,因为容器 ID 不再可以通过此路径访问。该文件夹中有大量目录,但没有一个与任何正在运行的容器匹配。

在这种情况下,为整个容器安装一个卷似乎是多余的。我知道我可以使用dokku run project-name lsdocker exec <container-id> ls 访问文件系统,但这些都不能满足我的用例。

为了更全面地解释一下,在我的 dokku 项目中,我有一些 .sql 文件用于引导我的 postgres 数据库。这些文件通过git push 与项目的其余部分一起推送。

我希望使用 postgres dokku 插件来运行以下内容:

dokku postgres:connect db-name < file-name.sql

这是我以前一直在使用的:

dokku postgres:connect db-name < /var/lib/docker/aufs/diff/<container-id>/app/file-name.sql 但这不再有效。

对此有什么想法吗?我对这一切都错了吗?

非常感谢您的任何想法。

【问题讨论】:

    标签: postgresql ubuntu docker dokku


    【解决方案1】:

    这是一个例子:

    dokku apps:list

    =====> 我的应用程序

    虚拟应用

    dokku enter DummyApp

    在 DummyApp 容器中输入 bash。

    【讨论】:

    • 这确实应该是公认的答案...只需将其放入应用程序工作目录中的外壳中就可以了。
    【解决方案2】:

    永远不要依赖/var/lib/docker 文件系统路径,因为其中存储的大部分数据都依赖于storage driver currently in use,因此可能会发生变化。

    cat来自现有容器的文件

    docker exec <container> cat file.sql | dokku postgres:connect db-name
    

    cat图片中的文件

    docker run --rm <image> cat file.sql | dokku postgres:connect db-name
    

    从现有容器中复制文件

    docker cp <container>:file.sql file.sql
    dokku postgres:connect db-name < file.sql
    

    【讨论】:

    • 太棒了。非常感谢。这很有意义。我的unix经验,显然是有限的。您的解释帮助我更好地理解 dokku postgres:connect db-name &lt; file-name.sql 命令在做什么。感谢您解释如何将该文件输出到我的 dokku 命令中。非常感谢!
    • 没问题。 Unix 命令行是all about the pipesredirection&lt; 只是将文件重定向到命令的标准输入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2017-01-07
    相关资源
    最近更新 更多