【问题标题】:Files unavailable when mouting the VOLUME with -v使用 -v 挂载 VOLUME 时文件不可用
【发布时间】:2016-05-17 23:57:14
【问题描述】:

我有一个 Docker 镜像,它有一个 VOLUME ["/log"]。

在运行容器时,我正在安装一个存在于主机上的文件夹。

我希望 docker 在 VOLUME ["/log"] 上写入的所有日志都可供主机使用。

docker run --name=test -v ${pwd}/hostlogfolder:/log  dockerimage:1

hostlogfolder 没有写入日志

但是日志可以在 docker 中的 /log 位置获得

docker exec -it test bash
cd /log

挂载文件夹的正确方法是什么?

【问题讨论】:

    标签: docker dockerfile docker-volume


    【解决方案1】:

    你快到了,命令需要稍微修正一下:

    docker run --name=test -v $(pwd)/hostlogfolder:/log  dockerimage:1
    

    注意括号是不同的:
    错误:${pwd}
    对:$(pwd)

    运行后,您可以使用以下方法验证已安装的卷:

    docker inspect <container id> -- 你可以使用docker ps获取容器id

    检查命令输出的 Mounts 部分。

    "Mounts": [
                {
                    "Source": "<host path>",
                    "Destination": "<container path>",
                    "Mode": "",
                    "RW": true
               }]
    

    【讨论】:

      【解决方案2】:

      如果您想创建具有预定义设置(例如添加卷)的映像,则必须使用 Dockerfile。或者,如果您不需要创建镜像,而只需要一个临时容器在创建容器时传递它。

      我认为您需要阅读有关创建卷和其他指令的文档。它可能对你很有用。

      docker run -d -P --name web -v /webapp training/webapp python app.py
      

      https://docs.docker.com/engine/userguide/containers/dockervolumes/

      【讨论】:

      • 我想访问 Docker 在 /log 位置写入的文件,这是我在 Dockerfile 中使用 VOLUME ["/log"] 提到的位置。当我运行 docker inspect 时,我看到两个挂载指向 docker 系统文件位置的挂载和一个指向我提供的主机路径的挂载。
      • 有没有办法在 Dockerfile 中使用 VOLUME 指令指定主机上的挂载点?
      • ^ nvm 我实际上做了一些docker inspect some-container | grep -e Source -e Destination,它的Dockerfile 中有一个VOLUME["/some/dir"] 指令。我在Destination -&gt; /some/dir 和我的主机上看到了一个自动创建的目录,这里是/var/lib/docker/volumes/some-container-id/_data。到目前为止,这已经解释了。
      猜你喜欢
      • 1970-01-01
      • 2020-05-24
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 2019-12-21
      • 1970-01-01
      相关资源
      最近更新 更多