简体   繁体   English

django.db.utils.OperationalError:无法连接到服务器:连接被拒绝

[英]django.db.utils.OperationalError: could not connect to server: Connection refused

I have 3 docker containers web(django), nginx, db(postgresql)我有 3 个 docker 容器 web(django)、nginx、db(postgresql)

When I run the following command当我运行以下命令时

docker-compose -f docker-compose.prod.yml exec web python manage.py migrate --noinput

The exact error is:确切的错误是:

  django.db.utils.OperationalError: could not connect to server: Connection refused
        Is the server running on host "localhost" (127.0.0.1) and accepting
        TCP/IP connections on port 5432?
    could not connect to server: Address not available
        Is the server running on host "localhost" (::1) and accepting
        TCP/IP connections on port 5432?

docker-compose.prod.yml docker-compose.prod.yml

version: '3.7'

services:
  db:
    image: postgres:12.0-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    env_file:
      - ./.envs/.db
  web:
    build:
      context: ./tubscout
      dockerfile: Dockerfile.prod
    command: gunicorn hello_django.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - .static_volume:/home/app/web/staticfiles
    expose:
      - 8000
    env_file:
      - ./.envs/.prod
    depends_on:
      - db
  nginx:
    build: ./nginx
    volumes:
      - .static_volume:/home/app/web/staticfiles
    ports:
      - 1337:80
    depends_on:
      - web

volumes:
  postgres_data:
  static_volume:

Dockerfile.prod Dockerfile.prod

###########
# BUILDER #
###########

# pull official base image
FROM python:3.8.3-alpine as builder

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install psycopg2 dependencies
RUN apk update \
    && apk add postgresql-dev gcc python3-dev musl-dev 

# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip wheel --no-cache-dir --no-deps -w /usr/src/app/wheels -r requirements.txt

#########
# FINAL #
#########

# pull official base image
FROM python:3.8.3-alpine

# create directory for the app user
RUN mkdir -p /home/app

# create the app user
RUN addgroup -S app && adduser -S app -G app

# create the appropriate directories
ENV HOME=/home/app
ENV APP_HOME=/home/app/web
RUN mkdir $APP_HOME
RUN mkdir $APP_HOME/staticfiles
WORKDIR $APP_HOME

# install dependencies
RUN apk update && apk add libpq
COPY --from=builder /usr/src/app /wheels
COPY --from=builder /usr/src/app/requirements.txt .
RUN pip install --no-cache /wheels/wheels/*

# copy entrypoint.sh
COPY ./entrypoint.sh $APP_HOME

# copy project
COPY . $APP_HOME

# chown all the files to the app user
RUN chown -R app:app $APP_HOME

# change to the app user
USER app

# run entrypoint.prod.sh
ENTRYPOINT ["/home/app/web/entrypoint.sh"]

settings.py设置.py

DATABASES = {
    'default': {
        "ENGINE": os.environ.get("SQL_ENGINE", "django.db.backends.sqlite3"),
        "NAME": os.environ.get("SQL_DATABASE", os.path.join(BASE_DIR, "db.sqlite3")),
        "USER": os.environ.get("SQL_USER", "user"),
        "PASSWORD": os.environ.get("SQL_PASSWORD", "password"),
        "HOST": os.environ.get("SQL_HOST", "localhost"),
        "PORT": os.environ.get("SQL_PORT", "5432"),
    }
}

./.envs/.db ./.envs/.db

POSTGRES_USER=postgres
POSTGRES_PASSWORD=123456789
POSTGRES_DB=tubscoutdb_prod

./.envs/.prod ./.envs/.prod

DEBUG=0
SECRET_KEY='#yinppohul88coi7*f+1^_*7@o9u@kf-sr*%v(bb7^k5)n_=-h'
DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1]
SQL_ENGINE=django.db.backends.postgresql
SQL_DATABASE=tubscoutdb_prod
SQL_USER=postgres
SQL_PASSWORD=123456789
SQL_HOST=localhost
SQL_PORT=5432
DATABASE=postgres

Change SQL_HOST to db in your .envs/.prod file..envs/.prod文件中将SQL_HOST更改为db This will let the Web container reach the DB container and perform the migration.这将使 Web 容器到达 DB 容器并执行迁移。

Docker compose containers can be accessed with their service name from other containers. Docker 可以从其他容器使用其服务名称访问组合容器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Django 与 Docker 上的 postgreSQL DB - django.db.utils.OperationalError:无法连接到服务器:连接被拒绝 - Django with postgreSQL DB on Docker - django.db.utils.OperationalError: could not connect to server: Connection refused Postgres django.db.utils.OperationalError:无法连接到服务器:连接被拒绝 - Postgres django.db.utils.OperationalError: could not connect to server: Connection refused PostgreSQL-django.db.utils.OperationalError:无法连接到服务器:连接被拒绝 - postgresql - django.db.utils.OperationalError: could not connect to server: Connection refused 得到 django.db.utils.OperationalError:无法连接到服务器:连接被拒绝 - Got django.db.utils.OperationalError: could not connect to server: Connection refused django.db.utils.OperationalError:无法连接到服务器:没有这样的文件或目录 - django.db.utils.OperationalError: could not connect to server: No such file or directory django.db.utils.OperationalError 无法连接到服务器 - django.db.utils.OperationalError Could not connect to server kubernetes 上的 Postgres+django:django.db.utils.OperationalError:无法连接到服务器:连接超时 - Postgres+django on kubernetes: django.db.utils.OperationalError: could not connect to server: Connection timed out Docker 和 Django。 django.db.utils.OperationalError: 无法连接到服务器 - Docker and Django. django.db.utils.OperationalError: could not connect to server django.db.utils.OperationalError:无法连接到服务器:Unix 域套接字“/tmp/.s.PGSQL.5432”上没有此类文件? - django.db.utils.OperationalError: could not connect to server: No such file on Unix domain socket “/tmp/.s.PGSQL.5432”? 在 Dockerfile 中运行“manage.py compilemessages”给出“django.db.utils.OperationalError:无法连接到服务器:没有这样的文件或目录” - Running “manage.py compilemessages” in Dockerfile gives “django.db.utils.OperationalError: could not connect to server: No such file or directory”
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM