我的Django项目面临着一个具有类似 struct 的问题.每个项目都有一个包含docker-compose.ymlDockerfile的后台文件夹. struct 如下: project1/backend/docker-compose.yml project2.backend/docker-compose.yml

当我在项目之间切换并运行docker-compose up时,问题就会出现.看起来名为backend的容器正在重用上一个项目中的服务,而不是创建新容器.

以下是每个项目的docker-compose.yml个示例:

项目1:

version: '3.9'

services:
  redis:
    image: redis:latest
    ports:
      - "6379:6379"

  postgres:
    image: postgres:12
    container_name: postgres
    environment:
      POSTGRES_PASSWORD: project_name
      POSTGRES_DB: project_name
    env_file:
      - .env
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data/

  celery:
    build:
      context: .
      dockerfile: Dockerfile
    command: celery -A project_name worker -l info
    volumes:
      - .:/opt/webapp
    depends_on:
      - redis
      - postgres

  celery-beat:
    build:
      context: .
      dockerfile: Dockerfile
    command: celery -A project_name beat -l info
    volumes:
      - .:/opt/webapp
    depends_on:
      - redis
      - postgres

volumes:
  postgres_data:

项目2:

version: "3.9"

services:
  web:
    build:
      context: .
      args:
        SECRET_KEY: ${SECRET_KEY}
    env_file: .env
    volumes:
      - ./:/opt/webapp
    ports:
      - "8000:8000"
    # Added Command for hot reloading in dev server
    command: >
      sh -c "python3 manage.py runserver 0.0.0.0:8000"

  postgres:
    env_file: .env
    environment:
      POSTGRES_PASSWORD: project_name
    volumes:
      - postgres-data:/var/lib/postgresql/data
    ports:
      - "5432:5432"

  redis:
    env_file: .env
    ports:
      - "6379:6379"

volumes: 
  postgres-data:

以下是每个项目的Dockerfile个示例

项目1:

# Use Python 3.11 slim image
FROM python:3.11-slim as base

# Install system dependencies
RUN apt-get update \
  && apt-get install -y --no-install-recommends python3-dev libpq-dev gcc \
  && rm -rf /var/lib/apt/lists/*

# Create and set working directory
WORKDIR /opt/webapp

# Install Pipenv
RUN pip3 install --no-cache-dir -q 'pipenv==2023.12.0'

# Copy Pipfile and Pipfile.lock
COPY Pipfile Pipfile.lock /opt/webapp/

# Install project dependencies
RUN pipenv install --deploy --system

# Copy the rest of the application
COPY . /opt/webapp

# Separate stage for release
FROM base as release

# Copy built files from the base stage
COPY --from=base /opt/webapp /opt/webapp

# Set environment variables and collect static files
ENV PATH=/root/.local/bin:$PATH
ARG SECRET_KEY
RUN python3 manage.py collectstatic --settings=project_name.settings.development

# Default command to run the server
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

项目2:

FROM python:3.8-slim as base

# libpq-dev and python3-dev help with psycopg2
RUN apt-get update \
  && apt-get install -y --no-install-recommends python3-dev libpq-dev gcc curl \
  && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
  && rm -rf /var/lib/apt/lists/*
 
WORKDIR /opt/webapp
COPY Pipfile* /opt/webapp/

RUN pip3 install --no-cache-dir -q 'pipenv==2018.11.26'
RUN pipenv install --deploy --system
COPY . /opt/webapp

FROM base as release

COPY --from=base /root/.local /root/.local
COPY --from=base /opt/webapp/manage.py /opt/webapp/manage.py


WORKDIR /opt/webapp
ENV PATH=/root/.local/bin:$PATH
ARG SECRET_KEY 
RUN python3 manage.py collectstatic --no-input

# Run the image as a non-root user
RUN adduser --disabled-password --gecos "" django
USER django
CMD waitress-serve --port=$PORT project_name.wsgi:application

我想确保每个项目创建自己的单独容器,而不是重复使用现有的后台容器.如何在保持当前项目 struct 的同时实现这一目标?如有任何见解或建议,我们将不胜感激.谢谢!

我已经 for each 服务给出了容器名称,但这对我没有帮助,我想知道如何区分这两个项目并 for each 项目创建不同的容器.

推荐答案

try 在docker-compose.yml文件中重命名服务/容器名称,例如"project1_postquist:.","project1_redis:. ".

我相信你也可以"docker-compound down -v"来删除匿名卷,但我认为启动时间会更长.

如果这不起作用,您还可以try 向您的特定项目添加网络,以便服务只有在同一网络中时才会相互交谈

networks:
  custom_network:
    driver: bridge

services:
  redis:
    image: redis:latest
    ports:
      - "6379:6379"
    networks:
      - custom_network

Python相关问答推荐

在Python中是否可以输入使用任意大小参数列表的第一个元素的函数

如何以实现以下所述的预期行为的方式添加两只Pandas pyramme

保留包含pandas pandras中文本的列

Snap 7- read_Area用于类似地址的变量

单击Python中的复选框后抓取数据

替换字符串中的点/逗号,以便可以将其转换为浮动

如何使用Selenium访问svg对象内部的元素

遵循轮廓中对象方向的计算线

仅从风格中获取 colored颜色 循环

当多个值具有相同模式时返回空

如何比较numPy数组中的两个图像以获取它们不同的像素

运输问题分支定界法&

如何并行化/加速并行numba代码?

joblib:无法从父目录的另一个子文件夹加载转储模型

用砂箱开发Web统计分析

dask无groupby(ddf. agg([min,max])?''''

使用Python从rotowire中抓取MLB每日阵容

(Python/Pandas)基于列中非缺失值的子集DataFrame

如何找出Pandas 图中的连续空值(NaN)?

搜索按钮不工作,Python tkinter