从Docker容器内部将文件写出到我的主机时遇到问题。我认为这是一个特权问题,因此最好不要设置privileged: True
。解决方法是将../
放在我的docker-compose.yml
文件中的卷之前。例如,
version: '3'
services:
example:
volumes:
- ../:/example
../
在这里到底在做什么?它是否从容器的特权中获取并“向上”到主机的目录?没有../
,我将无法写出文件到主机。
答案 0 :(得分:6)
除非您将更高目录指定为上下文,否则docker build命令只能访问其所在目录和更低目录,而不能访问更高目录。
要从父目录运行docker构建:
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
引用当前工作目录。从那里可以添加..
或者,您可以从一个目录建立映像,或者使用可以与从更高目录运行的映像共享的卷,或者需要将文件输出到stdout并重定向命令的输出从运行它的脚本中找到所需的文件。
答案 1 :(得分:2)
语句volumes: ['../:/example']
使主机(docker-compose.yml
)上包含../
的目录的父目录在/example
的容器内可见。这样的主机目录绑定安装以及附加到特定主机目录的一些equivalent constructs using a named volume是容器可以写出到主机文件系统的 only 方法。