postgresql django和nginx不在docker上工作

nvbavucw  于 2023-01-30  发布在  PostgreSQL
关注(0)|答案(1)|浏览(111)

我是一个初学者在docker和我想部署我的django项目使用nginx和postgres的vps使用docker所以我创建了一个dockerfile和docker-compose但它是不工作的这意味着postgres是在港口但django和nginx是不工作的我没有任何想法你能帮助我吗
我的停靠文件

FROM python:3.8-slim-buster

WORKDIR /usr/src/app

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN apt-get update && apt-get install -y build-essential libpq-dev 
RUN rm -rf /var/lib/apt/lists/*

COPY . .

RUN pip install --upgrade pip && pip install -r requirements.txt

我的 Docker 组成

version: '3.8'

services:

  database:
    container_name: database
    image: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres
    volumes:
      - postgres:/var/lib/postgresql/data
    restart: always

  app:
    build:
      context: .  
    container_name: django-app
    command: >
      sh -c "python3 manage.py migrate &&
            gunicorn config.wsgi:application --bind 0.0.0.0:8000"
    volumes:
      - static:/usr/src/app/static
      - media:/usr/src/app/media
    depends_on: 
      - database
    environment:
      - DEBUG=False
      - ALLOWD_HOST=*
      - DATABASE-NAME=postgres
      - DATABASE-USER=postgres
      - DATABASE-PASSWORD=postgres
      - DATABASE-HOST=database
      - DATABASE-PORT=5432

  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "80:80"
    volumes:
    - ./nginx:/etc/nginx/conf.d  
    - static:/var/www/static
    - media:/var/www/media 

volumes:
  postgres:
  static:
  media:
beq87vna

beq87vna1#

看起来您在Docker设置上有一个良好的开端,但有一些事情可能会导致问题。
首先,在你的docker-compose.yml中,你的nginx服务没有正确连接到django-app服务,nginx服务应该配置为代理请求到端口8000(gunicorn服务的端口)的django-app服务。
第二,您已经指定了nginx服务要使用的卷,但卷Map的路径不正确。卷Map的路径应该指向主机上nginx配置文件所在的实际目录,而不是合成文件中的./nginx目录。
最后,你还需要确保在docker-compose.yml文件中使用了正确的环境变量,这些变量应该与Django项目的www.example.com文件中的设置相匹配settings.py。
下面是一个示例,说明您的docker-compose.yml文件应该如何:

version: '3.8'
services:
  database:
    container_name: database
    image: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres
    volumes:
      - postgres:/var/lib/postgresql/data
    restart: always

  app:
    build:
      context: .
    container_name: django-app
    command: > 
      sh -c "python3 manage.py migrate && gunicorn config.wsgi:application --bind 0.0.0.0:8000"
    volumes:
      - static:/usr/src/app/static
      - media:/usr/src/app/media
    depends_on:
      - database
    environment:
      -DEBUG=False
      - ALLOWD_HOST=*
      - DATABASE-NAME=postgres
      - DATABASE-USER=postgres
      - DATABASE-PASSWORD=postgres
      - DATABASE-HOST=database
      - DATABASE-PORT=5432
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - /path/to/nginx/config/directory:/etc/nginx/conf.d
      - static:/var/www/static
      - media:/var/www/media
    depends_on:
      - app
    command: >
      sh -c "cp /etc/nginx/conf.d/nginx.conf /etc/nginx/nginx.conf && nginx -g 'daemon off;'"
volumes:
  postgres:
  static:
  media:

您需要确保nginx服务中的卷Map路径是正确的,并且应用服务中的环境变量与Django项目的www.example.com文件中的设置相匹配settings.py,这将有助于Django和nginx在Docker中运行。

相关问题