docker-compose - ADD failed: Forbidden path outside the build context
我有这样的文件夹结构
1 2 3 4 5 6 7 8 | project - config -docker Dockerfile docker-compose.yml - src here_is_code requirements.txt |
文档文件
1 2 3 4 5 6 7 | FROM python:3 ENV PYTHONUNBUFFERED 1 RUN mkdir /code WORKDIR /code ADD ../../requirements.txt /code/ RUN pip install -r requirements.txt ADD src /code/ |
docker-compose.yml公司
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | version: '3' services: web: build: context: ../../ dockerfile: config/docker/Dockerfile command: bash -c"ls" volumes: - .:/code expose: -"8000" nginx: image: nginx ports: -"8000:8000" volumes: - .:/code - ./config/nginx:/etc/nginx/conf.d depends_on: - web |
当我运行
Service 'web' failed to build: ADD failed: Forbidden path outside the build context: ../../requirements.txt ()
是否可以添加requirements.txt,或者我必须将此文件复制到docker目录中?或者我需要使用任何入口点(entrypoint.sh)?
更新
在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | web_1 | /code: web_1 | Dockerfile web_1 | config web_1 | docker-compose.yml web_1 | src web_1 | static web_1 | web_1 | /code/config: web_1 | nginx web_1 | web_1 | /code/config/nginx: web_1 | web_1 | /code/src: web_1 | static web_1 | web_1 | /code/src/static: web_1 | web_1 | /code/static: |
语境
一切都是关于环境的。在构建中指定上下文和dockerfile,您可以将dockerfile放在任何地方。玩一局(她就是这么说的)。
我至少会将docker-compose.yaml保存在根目录中。
1 2 3 | build: context: . dockerfile: dockerfiles/project-one/Dockerfile |
在构建映像时,不能超出Docker的构建上下文(通常是工作目录)。
原因很简单——Docker由命令行客户机和守护程序组成,当您调用
您需要设置根文件夹的构建上下文并显式指定
您的build命令看起来像
1 | docker build -f config/docker/Dockerfile . |
在
最后,您将看到以下组合文件:
docker-compose.yml公司
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | version: '3' services: web: build: context: . # here changed dockerfile: config/docker/Dockerfile command: ["bash","-c","ls"] expose: -"8000" nginx: image: nginx ports: -"8000:8000" depends_on: - web |
您转到项目根目录并运行
1 | docker-compose -f config/docker/docker-compose.yml up |
希望,我的答案会对某些人有所帮助(尽管我已经看过很多Github存储库)
我有错误的项目结构。如果需要分离docker文件和应用程序代码,最好将代码放在根文件夹中的任何文件夹(例如,名为