【问题标题】:What is happening when using ../ with docker-compose volume将 ../ 与 docker-compose 卷一起使用时会发生什么
【发布时间】:2018-12-05 13:30:54
【问题描述】:

我在将文件从 docker 容器内写入主机时遇到问题。我相信这是一个特权问题,不希望设置privileged: True。写出文件的解决方法是将../ 预先挂在我的docker-compose.yml 文件中的卷上。例如,

version: '3'
services:
    example:
        volumes:
         - ../:/example

../ 到底在做什么?它是从容器的特权中获取并“向上”到主机的目录吗?没有../,我无法将文件写入我的主机。

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    将路径指定为源,而不是卷名,绑定将主机路径安装到容器内的路径。在您的示例中,../ 将在最近版本的 docker 上的 /example 的容器内可见。

    旧版本的 docker 只能访问它所在的及更低的目录,不能访问更高的目录,除非你指定更高的目录作为上下文。

    从父目录运行 docker build:

    docker build -f /home/me myapp/Dockerfile 
    

    相对

    docker build -f /home/me/myapp Dockerfile
    

    在作曲家中做同样的事情:

     #docker-compose.yml
     version: '3.3'    
     services:
       yourservice:
         build:
           context: /home/me
           dockerfile: myapp/Dockerfile
    

    或者用你的例子:

     version: '3'
     services:
         build: 
            context: /home/me/app
            dockerfile: docker/Dockerfile
         example:
            volumes:
              - /home/me/app:/example
    

    此外,您必须提供完整路径,而不是相对路径。即。

    - /home/me/myapp/files/example:/example 
    

    如果您有一个从未知路径生成 Dockerfile 的脚本,您可以使用:

    CWD=`pwd`; echo $CWD
    

    引用当前工作目录。从那里你可以附加 /..

    或者,您可以从一个目录向上构建映像,或者使用可以与从更高目录运行的映像共享的卷,或者您需要将文件输出到标准输出并重定向命令的输出从运行它的脚本到你需要的文件。

    另请参阅:Docker: adding a file from a parent directory

    【讨论】:

    • 这应该是公认的答案。当前接受的答案是有道理的,但它不起作用。就像我说,“我要从我的银行账户中提取 100 万美元”。这句话有意义,但它不会发生。但是,我确实认为您可以使用相对路径。
    • 我认为这个答案已经过时了。使用当前版本(Docker:20.10.2,Compose:1.28.0)绑定安装父目录是可能的。
    • 不适用于 20.10.1.. 错误:“../”包含本地卷名的无效字符
    • 我看不到明确的答案是相对于撰写文件位置还是相对于当前工作目录。
    • 你的意思是从哪个角度?撰写文件需要位于当前工作目录之下。如果在上面,您需要移动它,或者将工作目录更改为更接近根目录的路径。
    【解决方案2】:

    语句volumes: ['../:/example'] 使主机上包含docker-compose.yml 的目录的父目录(../) 在容器内/example 可见。像这样的主机目录绑定挂载,加上一些附加到特定主机目录的equivalent constructs using a named volume,是容器可以写入主机文件系统的唯一方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      相关资源
      最近更新 更多