我有一个简单的VUE+Django项目,我希望能够与 docker 集装箱这个项目,但我遇到了一些问题.我有docker文件和docker编写文件在每个子文件夹-前端和后端-如果我CD到任何一个,我可以成功地启动每个单独的项目使用docker编写没有问题.

然而,我希望能够运行一个可以同时创建两个图像的Docker Compose命令.我目前在项目的根目录中有一个docker组合文件,我正在包括组合文件并在服务中引用它们.它只适用于VUE服务,但当我包括Django服务时,它会给我一个错误.错误代码为:

failed to solve: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount2369903057/Dockerfile: no such file or directory

Django项目是使用cookiecuter创建的,因此它包含了我在项目中需要的所有内容.以下是我的文件 struct 的一个简单版本:

  - api 
      - compose 
        - Dockerfile
    - docker-compose.yml
  - frontend
    - Dockerfile
    - docker-compose.yml
  - docker-compose.yml

以下是我的后端 compose 文件:


volumes:
  api_local_postgres_data: {}
  api_local_postgres_data_backups: {}

services:
  django:
    build:
      context: .
      dockerfile: ./compose/local/django/Dockerfile
    image: api_local_django
    container_name: api_local_django
    depends_on:
      - postgres
    volumes:
      - .:/app:z
    env_file:
      - ./.envs/.local/.django
      - ./.envs/.local/.postgres
    ports:
      - '8000:8000'
    command: /start

  postgres:
    build:
      context: .
      dockerfile: ./compose/production/postgres/Dockerfile
    image: api_production_postgres
    container_name: api_local_postgres
    volumes:
      - api_local_postgres_data:/var/lib/postgresql/data
      - api_local_postgres_data_backups:/backups
    env_file:
      - ./.envs/.local/.postgres

  docs:
    image: api_local_docs
    container_name: api_local_docs
    build:
      context: .
      dockerfile: ./compose/local/docs/Dockerfile
    env_file:
      - ./.envs/.local/.django
    volumes:
      - ./docs:/docs:z
      - ./config:/app/config:z
      - ./api:/app/api:z
    ports:
      - '9000:9000'
    command: /start-docs

以下是根部构图:


include:
  - ./frontend/docker-compose.yml
  - ./api/docker-compose.yml

services:
  frontend_vue:
    build: ./frontend
    depends_on:
      - vue-ui

  backend_django:
    build: ./api
    depends_on:
      - django

  backend_postgres:
    build: ./api
    depends_on:
      - postgres

  backend_docs:
    build: ./api
    depends_on:
      - docs

推荐答案

不需要在根docker-compose.yml文件中重新声明中的服务. 例如,当您在根docker-compose.yml文件中包含api/docker-compose.yml时,api/docker-compose.yml文件中定义的所有服务都将加载到根组合应用程序模型中.因此,服务已经在根组合应用程序中可用,您不需要在根docker-compose.yml文件中再次声明它.

因此,这docker-compose.yml个文件将如下所示:

root 100:

include:
  - ./frontend/docker-compose.yml
  - ./api/docker-compose.yml

100:

version: '3'

services:
  ...

Django相关问答推荐

使用FormWizard将信息从视图传递到表单

django re_path() 函数模式与包含该模式的 url 不匹配

一次请求中更新整个Django模型

Django如何在没有ctrl点击的情况下允许多选

Django 如何知道我的数据库的路径?

在 Django 中处理信用卡付款的最佳 Select 是什么?

Django RESTful API - django-piston vs. django-tastypie

Django 模型中的隐藏字段

如何从 django 自定义中间件类返回 rest_framework.response 对象?

在 django 中获取本地时区

如何在 Django 中向 ModelForm 添加外键字段?

从 virtualenv 中,pip freeze > requirements.txt 给出了一堆垃圾!如何修剪它?

如何创建一个在复选框右侧显示复选框标签的 Django 表单?

现在如何在 Django 中处理每个对象的权限?

如何将 django csrf 令牌直接嵌入 HTML?

在 Celery 任务中运行 Scrapy 蜘蛛

Django Admin:如何在内联中显示模型上定义的属性?

Django:DoesNotExist从何而来?

BASE DIR 的绝对路径是什么?

Django的不区分大小写的网址?