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

时间:2017-11-02 14:42:49

标签: docker docker-compose

我正在尝试将主机中的文件夹作为卷挂载到容器中。我想知道这个安装过程在什么步骤完成 - 我希望它在构建阶段,但似乎我的文件夹没有安装。

文件夹结构:

 -> 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

我将 app 目录从主机安装到容器内的 / myapp 中,构建过程设置工作目录并运行 ls 看到内容,我期待我的reuqiremetns.txt文件存在。

我做错了什么?

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

1 个答案:

答案 0 :(得分:1)

您的requirements.txt文件在构建时未复制到映像中,因为上下文未捕获它,并且在构建时不存在requirements.txt

卷在容器创建时挂载,而不是在构建时挂载。如果您希望文件在Dockerfile中可用(例如在构建时),则需要将其包含在上下文中并复制它以使其可用。

来自Docker文档:https://docs.docker.com/engine/reference/builder/

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

这是两个问题:

  • 您没有使用构建上下文发送您的需求文件,因为您的Dockerfile位于单独的目录结构中,因此requirements.txt在构建时不可用
  • 在运行ls命令(COPY ./app/requirements.txt /myapp/
  • 之前,您没有将文件复制到图像中

如果可以更改目录结构以在构建时使requirements.txt可用,并在运行COPY之前向Dockerfile添加ls命令,则应该会看到期望的行为build