使用../与docker-compose音量时发生的事情

jip*_*pot 5 docker docker-compose

我在将文件从docker容器内部写入主机时遇到问题.我相信这是一个特权问题,不愿意设置privileged: True.写出文件的工作是预先挂起../到我docker-compose.yml文件中的卷.例如,

version: '3'
services:
    example:
        volumes:
         - ../:/example
Run Code Online (Sandbox Code Playgroud)

到底在../做什么?是从容器的权限和"上升"目录到主机?没有../,我无法将文件写入我的主机.

Dav*_*aze 8

该语句volumes: ['../:/example']使docker-compose.yml主机(../)上包含的目录的父目录在容器内可见/example。像这样的主机目录绑定安装,再加上一些使用附加到特定主机目录的命名卷的等效构造,是容器可以写出到主机文件系统的唯一方法。


dag*_*elf 6

除非您将更高的目录指定为上下文,否则docker build命令只能访问它所在的目录,而不是更高的目录.

要从父目录运行docker build:

docker build -f /home/me myapp/Dockerfile 
Run Code Online (Sandbox Code Playgroud)

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

 #docker-compose.yml
 version: '3.3'    
 services:
   yourservice:
     build:
       context: /home/me
       dockerfile: myapp/Dockerfile
Run Code Online (Sandbox Code Playgroud)

或者用你的例子:

 version: '3'
 services:
     build: 
        context: /home/me/app
        dockerfile: docker/Dockerfile
     example:
        volumes:
          - /home/me/app:/example
Run Code Online (Sandbox Code Playgroud)

此外,您必须提供完整路径,而不是相对路径.IE浏览器.

- /home/me/myapp/files/example:/example 
Run Code Online (Sandbox Code Playgroud)

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

CWD=`pwd`; echo $CWD
Run Code Online (Sandbox Code Playgroud)

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

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

另请参阅:Docker:从父目录添加文件