【问题标题】:docker mount data from container to hostdocker 将数据从容器挂载到主机
【发布时间】:2018-05-15 10:51:14
【问题描述】:

我创建了自己的 Dockerfile,在构建过程中我插入到 /opt/wifly/log 我的 log4j.xml。 现在我需要创建卷 /mnt/data/logs/application:/opt/wildfly/log

我运行命令 sudo docker run --name=myapp -v /mnt/data/logs/application:/opt/wildfly/log -d -i -t application

但是当我查看 docker 容器时,文件夹 /opt/wifly/log 是空的。在这个文件夹中应该是 log4j.xml。

谢谢。

【问题讨论】:

  • 至少您应该决定是要使用/opt/wilfly/log(在您的问题中出现第 1 次和第 4 次)还是使用 /opt/wildfly/log(第 2 次和第 3 次)。然后登录到容器docker exec -it {containerId} sh,在你想要的目录下创建一个文件,并检查你是否可以在主机上看到它。如果是,则您的应用程序根本没有创建日志,如果不是,您可能是在错误的位置安装/查找。
  • 看到答案后,我敢建议您不要将日志配置从主机挂载到容器。它应该被部署为容器的一个组成部分。您应该挂载的是日志输出的目录,以便在容器停止后保留它们。

标签: docker dockerfile docker-volume


【解决方案1】:

也许你应该把它移到另一个目录。

例如将 log4j.xml 移动到 /opt/wilfly/ 并将日志记录路径设置为 /opt/wilfly/log。 p>

运行容器时,log4j.xml 不会消失。

【讨论】:

    【解决方案2】:

    当您挂载数据时,主机中的文件夹会“覆盖”容器中已挂载的文件夹。

    因此,您可以做一些选择:

    1. log4j.xml 复制到您的本地/mnt/data/logs/application 文件夹中,然后像以前一样运行容器。
    2. 删除 -v /mnt/data/logs/application:/opt/wildfly/log 并使用您在映像构建期间添加的原始 log4j.xml

    请注意,如果您愿意,您也可以只安装文件(而不是整个 floder):-v /mnt/data/logs/application/log4j.xml:/opt/wildfly/log/log4j.xml 但它不会改变行为 - 来自您主机的文件将被安装到容器中而不是反方向。

    【讨论】:

    • 伙计,这个问题令人困惑......我什至没有意识到 OP 想要将记录器配置文件从主机复制到容器,这既不聪明也不很清楚 :)
    猜你喜欢
    • 1970-01-01
    • 2021-01-13
    • 2019-07-08
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    相关资源
    最近更新 更多