RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1584958
Accepted
dratyti
dratyti
Asked:2024-06-23 22:04:11 +0000 UTC2024-06-23 22:04:11 +0000 UTC 2024-06-23 22:04:11 +0000 UTC

django 在 docker 中连接数据库时出错

  • 772

我在drf上做了一个小api,但是启动的时候出现错误

FROM ubuntu:22.04

ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
ARG DEBIAN_FRONTEND=noninteractive
ENV PATH=$PATH:/usr/bin/python3.11

# Установка зависимостей
RUN apt-get update && apt-get install -y --no-install-recommends \
    python3.11 \
    python3-pip \
    postgresql \
    postgresql-contrib \
     && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

# Обновление pip
RUN pip install --upgrade pip --no-cache-dir

# Установка зависимостей для проекта
COPY requirements.txt /app/requirements.txt
WORKDIR /app
RUN pip install -r requirements.txt --no-cache-dir

# Копирование проекта
COPY . /app/

# Установка прав доступа
RUN chmod -R 755 /app/

# Очистка
RUN rm -rf /var/lib/apt/lists/*

docker-撰写:

version: '3.8'

volumes:
  pgdata:
  static:
  media:

services:

  django:
    build:
      context: .
    ports:
      - '8000:8000'
    container_name: django
    env_file:
      - docker/env/.env.dev
    volumes:
      - ./:/app
      - static:/app/static
      - media:/app/media
    depends_on:
      - postgres
      - redis
    command: sh -c "python3 manage.py collectstatic --no-input &&
                    python3 manage.py makemigrations &&
                    python3 manage.py migrate &&
                    python3 manage.py runserver 0.0.0.0:8000"

  nginx:
    container_name: nginx
    working_dir: /app
    image: nginx:stable-alpine
    restart: always
    ports:
      - "80:80"
    volumes:
      - static:/app/static
      - media:/app/media
      - ./docker/nginx/dev/:/etc/nginx/conf.d:ro
    links:
      - django
    depends_on:
      - django

  postgres:
    image: postgres:alpine
    container_name: postgres
    restart: always
    env_file:
      - docker/env/.env.dev
    volumes:
      - pgdata:/var/lib/postgresql/data/
    environment:
      POSTGRES_PASSWORD: example
  redis:
    image: redis:alpine
    container_name: redis
    env_file:
      - docker/env/.env.dev
    expose:
      - 6379
    volumes:
      - ./docker/redis/data:/data
   

我做错了什么?错误:

django    | connection to server at "localhost" (127.0.0.1), port 5432 failed: Connection refused
django    |     Is the server running on that host and accepting TCP/IP connections?

设置.py:

DATABASES = {
    'default': {
        'ENGINE': getenv("DB_ENGINE"),
        'NAME': getenv("DB_NAME"),
        'USER': getenv("DB_USER"),
        'PASSWORD': getenv("DB_PASSWORD"),
        'HOST': getenv("DB_HOST"),
        'PORT': getenv("DB_PORT"),
    }
}

.env:

DB_ENGINE=django.db.backends.postgresql
DB_NAME=remnovo
DB_USER=postgres
DB_PASSWORD=qwerty
DB_HOST=localhost
DB_PORT=5432
docker-compose
  • 1 1 个回答
  • 27 Views

1 个回答

  • Voted
  1. Best Answer
    argenalmaz00
    2024-06-24T00:30:22Z2024-06-24T00:30:22Z

    更改代码settings.py

    DATABASES = {
        'default': {
            'ENGINE': getenv("DB_ENGINE"),
            'NAME': getenv("DB_NAME"),
            'USER': getenv("DB_USER"),
            'PASSWORD': getenv("DB_PASSWORD"),
            'HOST': getenv("DB_CONNECT"), # место db_host на db_connect 
            'PORT': getenv("DB_PORT"),
        }
    }
    

    更正了DB_HOST值0.0.0.0

    添加DB_CONNECT了意义192.168.10.4

    .env

    DB_ENGINE=django.db.backends.postgresql
    DB_NAME=remnovo
    DB_USER=postgres
    DB_PASSWORD=qwerty
    DB_HOST=0.0.0.0
    DB_PORT=5432
    DB_CONNECT=192.168.10.4
    

    添加yml,生成网络并颁发每个容器ip地址 并设置第一个postgres

    docker-compose

    version: '3.8'
    
    volumes:
      pgdata:
      static:
      media:
    
    services:
    
      postgres:
        image: postgres:alpine
        container_name: postgres
        restart: always
        env_file:
          - docker/env/.env.dev
        volumes:
          - pgdata:/var/lib/postgresql/data/
        environment:
          POSTGRES_PASSWORD: example
      redis:
        image: redis:alpine
        container_name: redis
        env_file:
          - docker/env/.env.dev
        expose:
          - 6379
        volumes:
          - ./docker/redis/data:/data
        
        networks:
          mynetwork:
            ipv4_address: 192.168.10.4
    
      django:
        build:
          context: .
        ports:
          - '8000:8000'
        container_name: django
        env_file:
          - docker/env/.env.dev
        volumes:
          - ./:/app
          - static:/app/static
          - media:/app/media
        depends_on:
          - postgres
          - redis
        networks:
          mynetwork:
            ipv4_address: 192.168.10.2
    
        command: sh -c "python3 manage.py collectstatic --no-input &&
                        python3 manage.py makemigrations &&
                        python3 manage.py migrate &&
                        python3 manage.py runserver 0.0.0.0:8000"
    
      nginx:
        container_name: nginx
        working_dir: /app
        image: nginx:stable-alpine
        restart: always
        ports:
          - "80:80"
        volumes:
          - static:/app/static
          - media:/app/media
          - ./docker/nginx/dev/:/etc/nginx/conf.d:ro
        links:
          - django
        depends_on:
          - django
        
        networks:
          mynetwork:
            ipv4_address: 192.168.10.3
       
    
    networks:
      mynetwork:
        driver: bridge
        ipam:
          config:
            - subnet: 192.168.10.0/24
              gateway: 192.168.10.1
    
    • 0

相关问题

  • docker-compose.yml 中的“`services.SERVICE_NAME.build`”选项有什么作用?

  • docker,容器通信

  • 码头工人网络

  • 从互联网访问容器

  • 如何在容器和外部连接之间建立连接?

  • 如何在adminner中登录数据库

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5