首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将../与docker-compose volume一起使用时会发生什么情况

将../与docker-compose volume一起使用时会发生什么情况
EN

Stack Overflow用户
提问于 2018-06-27 02:35:21
回答 2查看 22K关注 0票数 13

我在将文件从docker容器内写出到我的主机上时遇到了问题。我认为这是一个权限问题,不希望设置privileged: True。写出文件的一种变通方法是在我的docker-compose.yml文件中预先挂起一个卷的../。例如,

代码语言:javascript
复制
version: '3'
services:
    example:
        volumes:
         - ../:/example

../到底在这里做什么?它是不是剥夺了容器的特权,并将目录“上移”到主机上?没有../,我无法将文件写出到我的主机。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-27 07:00:17

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

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

要从父目录运行docker构建:

代码语言:javascript
复制
docker build -f /home/me myapp/Dockerfile 

而不是

代码语言:javascript
复制
docker build -f /home/me/myapp Dockerfile

在composer中执行相同的操作:

代码语言:javascript
复制
 #docker-compose.yml
 version: '3.3'    
 services:
   yourservice:
     build:
       context: /home/me
       dockerfile: myapp/Dockerfile

或者用你的例子:

代码语言:javascript
复制
 version: '3'
 services:
     build: 
        context: /home/me/app
        dockerfile: docker/Dockerfile
     example:
        volumes:
          - /home/me/app:/example

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

代码语言:javascript
复制
- /home/me/myapp/files/example:/example 

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

代码语言:javascript
复制
CWD=`pwd`; echo $CWD

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

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

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

票数 16
EN

Stack Overflow用户

发布于 2018-07-03 09:30:51

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

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51049460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档