我在将文件从docker容器内写出到我的主机上时遇到了问题。我认为这是一个权限问题,不希望设置privileged: True。写出文件的一种变通方法是在我的docker-compose.yml文件中预先挂起一个卷的../。例如,
version: '3'
services:
example:
volumes:
- ../:/example../到底在这里做什么?它是不是剥夺了容器的特权,并将目录“上移”到主机上?没有../,我无法将文件写出到我的主机。
发布于 2018-06-27 07:00:17
将路径指定为源,而不是卷名,bind会将主机路径装载到容器内的路径。在您的示例中,../将在最新版本的docker上的/example容器中可见。
旧版本的docker只能访问它所在的目录和更低的目录,而不能访问更高的目录,除非您指定更高的目录作为上下文。
要从父目录运行docker构建:
docker build -f /home/me myapp/Dockerfile 而不是
docker build -f /home/me/myapp Dockerfile在composer中执行相同的操作:
#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引用当前的工作目录。从那里你可以附加/..
或者,您可以从上一个目录构建映像,或者使用可以与从更高目录运行的映像共享的卷,或者您需要将文件输出到stdout,并将命令的输出重定向到运行它的脚本中所需的文件。
发布于 2018-07-03 09:30:51
语句volumes: ['../:/example']使主机(../)上包含docker-compose.yml的目录的父目录在/example处的容器内可见。像这样的主机目录绑定挂载,加上附加到特定主机目录的一些equivalent constructs using a named volume,是容器可以写出到主机文件系统的唯一方式。
https://stackoverflow.com/questions/51049460
复制相似问题