gpt4 book ai didi

python - docker-compose 与 postgres 的 Django 连接

转载 作者:IT老高 更新时间:2023-10-28 21:25:15 25 4
gpt4 key购买 nike

我的 django 项目无法连接到 postgres 数据库容器。我该怎么办?

它在命令 python manage.py collectstatic --noinput && python manage.py makemigrations blog && python manage.py migrate 上崩溃。我知道 docker run 命令会创建一个新容器,但我有更多命令一个是 docker-compose.yml 中的 bash。它应该有效,不是吗?

我的 Dockerfile:

FROM python:3.6-alpine
MAINTAINER Name <name@domain>

ENV PYTHONUNBUFFERED 1
ENV INSTALL_PATH /heckblog
RUN mkdir -p $INSTALL_PATH

WORKDIR $INSTALL_PATH


COPY requirements.txt requirements.txt

# make available run pip install psycopg2
RUN apk update && \
apk add --virtual build-deps gcc python3-dev musl-dev && \
apk add postgresql-dev
RUN pip3 install -r requirements.txt

# add bash into alpine linux
RUN apk add --update bash && rm -rf /var/cache/apk/*

COPY ./heckblog .
#RUN pip install .

CMD gunicorn -b 0.0.0.0:8000 --access-logfile - "config.wsgi:application"

我的 docker-compose.yml:

version: '2'


services:
db:
image: postgres:alpine
environment:
POSTGRES_USER: blogdmin
POSTGRES_PASSWORD: password
POSTGRES_DB: heckblog
PGDATA: /tmp/pgdata
volumes:
- postgres_data:/tmp/pgdata

web:
build: .
command: >
bash -c "sleep 10 &&
python manage.py collectstatic --noinput &&
python manage.py makemigrations blog &&
python manage.py migrate &&
echo \"from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'admin@example.com', 'pass')\" | python manage.py shell &&
gunicorn -b 0.0.0.0:8000 --access-logfile - --reload \"config.wsgi:application\""
volumes:
- ./heckblog:/heckblog
depends_on:
- db
environment:
IN_DOCKER: 1
ports:
- "80:8000"


volumes:
postgres_data:

settings.py:

...

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'heckblog',
'USER': 'blogdmin',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '', # default port
}
}

...

docker-compose up --build的输出:

web_1  |        TCP/IP connections on port 5432?
web_1 | could not connect to server: Connection refused
web_1 | Is the server running on host "localhost" (127.0.0.1) and accepting
web_1 | TCP/IP connections on port 5432?
web_1 |
heckblog_web_1 exited with code 1

我使用: window 10 docker 17.03.0-ce-win1-(10296) docker 撰写版本 1.11.2Django==1.10.6psycopg2==2.7.1.

感谢解答

最佳答案

默认情况下,docker 中的每个容器都有自己的主机名和 IP。当 compose 为您启动容器时,它还会默认将所有容器放在网络上,以允许基于 DNS 的发现。

这意味着您的数据库在本地主机上无法访问,但您可以通过服务名称“db”访问它。在您的 settings.py 中更改此行:

    'HOST': 'localhost',

到:

    'HOST': 'db',

关于python - docker-compose 与 postgres 的 Django 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42811727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com