django - 为什么我的Django应用程序无法连接到docker内部的postgres

标签 django postgresql docker docker-compose

我正在尝试在Docker容器中启动django应用
docker-compose.yml

version: '3.8'

services:
  api:
    build:
      context: .
      dockerfile: ./Dockerfile-local
    ports:
      - "8000:8000"
    entrypoint: ./entrypoint-local.sh
    env_file:
      - .env-local
    links:
      - postgresql
  postgresql:
    image: postgres:12.4
    restart: always
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_DB=frov_db
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_HOST=postgresql
      - POSTGRES_PORT=5432
      - PGDATA=/var/lib/postgresql/data/pgdata
      - C_FORCE_ROOT=true
    ports:
      - '5433:5432'
Dockerfile本地
FROM python:3.8-slim

ENV PYTHONDONTWRITEBYTECODE 1

WORKDIR /usr/src/app

COPY Pipfile.lock Pipfile ./
RUN pip install -U setuptools pip pipenv && pipenv install --system --deploy --ignore-pipfile --dev

COPY . .

RUN touch /var/log/filebeat.log && chmod 664 /var/log/filebeat.log \
&& chmod +x ./entrypoint-local.sh
entrypoint-local.sh
#!/bin/bash

python manage.py collectstatic --no-input --settings frov.settings.default

python manage.py migrate --settings frov.settings.default
python manage.py seed

gunicorn -b 0.0.0.0:8000 --workers=1 --env DJANGO_SETTINGS_MODULE=frov.settings.default frov.wsgi:application
.env-本地
DEBUG=True
DJANGO_SETTINGS_MODULE=frov.settings.default
DB_NAME=frov_db
DB_USER=postgres
DB_PASS=postgres
DB_HOST=postgresql
DB_PORT=5433
现在我有了主意,为什么会出现这样的错误
api_1         | psycopg2.OperationalError: could not connect to server: Connection refused
api_1         |     Is the server running on host "postgresql" (172.21.0.2) and accepting
api_1         |     TCP/IP connections on port 5433?
谁能帮助我?我只是不知道哪里可能发生错误

最佳答案

这个 ports config section:

ports:
  - '5433:5432'
5432容器端口公开到5433主机端口。但是,在docker网络中,仍然可以通过5432端口访问数据库,因此您需要更改.env文件以使用5432端口。
如果您不需要其他应用程序即可从主机访问数据库,则可以完全忽略此ports部分(您仍然可以使用docker-compose exec与其连接)

关于django - 为什么我的Django应用程序无法连接到docker内部的postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64630266/

相关文章:

python - 在我尝试安装 pip install -r requirements.txt 文件后,Docker 构建出现错误

postgresql - 如何插入UUID的值?

docker-compose:在 Jenkins 上找不到命令

mysql - 将 phpMyAdmin docker 图像连接到仅在 127.0.0.1 上监听的 HOST MySQL 服务器

php - 无法从 php 容器连接到 mysql 容器

jquery - 如何在 django 中创建嵌套多选树

jquery - 在Django中重新加载表数据而不刷新页面

python - Django 服务器在 CONTROL-C 之后仍在运行

PostgreSQL\d 命令 : Any way to "select" only one column?

database - 复制 PostgreSQL 数据以进行分析