我正在尝试将主机中的文件夹作为卷挂载到容器中。我想知道这个安装过程在什么步骤完成 - 我希望它在构建阶段,但似乎我的文件夹没有安装。
文件夹结构:
-> 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。
答案 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
这是两个问题:
requirements.txt
在构建时不可用ls
命令(COPY ./app/requirements.txt /myapp/
)如果可以更改目录结构以在构建时使requirements.txt
可用,并在运行COPY
之前向Dockerfile添加ls
命令,则应该会看到期望的行为build
。