Docker从主机卷组成相对文件夹

我正在尝试从主机挂载一个文件夹作为卷的容器。 我想知道在这个安装过程完成了什么步骤 – 我期望它在构build阶段,但似乎我的文件夹没有安装。

文件夹结构:

-> app |-> requirements.txt - docker |-> web |-> Dockerfile -> docker-compose.yml 

docker-compose.yml包含以下内容:

 version: '2' services: web: build: ./docker/web volumes: - './app:/myapp' 

容器的docker文件:

 FROM ubuntu:latest WORKDIR /myapp RUN ls 

我将主机上的应用程序目录挂载到容器内的/ myapp中,构build过程设置工作目录并运行ls以查看内容,并期待我的reuqiremetns.txt文件在那里。

我究竟做错了什么?

docker-compose v1.16.1,docker v1.16.1。 我正在使用docker for windows。

您的requirements.txt文件不会在构build时复制到映像中,因为上下文没有拾取它,并且在构build时不存在requirements.txt

卷在容器创build时装载,而不是在构build时。 如果你想让你的文件在你的Dockerfile中可用(例如在构build时),你需要将它包含在上下文中,并复制它使其可用。

从这里的Docker文档: https : //docs.docker.com/engine/reference/builder/

 The first thing a build process does is send the entire context (recursively) to the daemon 

这是两个问题:

  • 你没有发送你的需求文件与你的构build上下文,因为你的Dockerfile在一个单独的目录结构,所以requirements.txt不是在编译时可用
  • 在运行ls命令( COPY ./app/requirements.txt /myapp/ )之前,不会将文件复制到映像中

如果可以修改你的目录结构以使build.txt在构build时可用,并且在运行你的ls之前添加一个COPY命令到你的Dockerfile,你应该看到你在build过程中期望的行为。