我在使用 django/postgres 应用程序(使用 sqlalchemy)运行 docker-compose up
时遇到问题。
在本地运行时一切都很好,但是当我尝试将它(使用 Docker)合并时,我遇到了一个错误:
<块引用>sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) 无法连接到服务器:连接被拒绝。服务器是否在主机“127.0.0.1”上运行并接受端口 5432 上的 TCP/IP 连接`
由于某种原因,应用没有连接到数据库。
我的docker-compose.yml:
version: "3.9"
services:
db:
image: postgres:9.6
environment:
- POSTGRES_DB=my database
- POSTGRES_USER=my user
- POSTGRES_PASSWORD=my password
web:
build: .
command: python3 manage.py runserver 127.0.0.1:8080
volumes:
- .:/code
ports:
- "8080:8080"
depends_on:
- db
我的 Dockerfile:
FROM python:3
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip3 install --trusted-host pypi.python.org -r requirements.txt
COPY . /code/
我的引擎:
engine = create_engine("postgresql://my user:my password@127.0.0.1:5432/my database")
Django settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'my database',
'USER': 'my user',
'PASSWORD': 'my password',
'HOST': '127.0.0.1',
'PORT': 5432,
}
}
谁能告诉我哪里出错了?
编辑:
我尝试了 Max 的解决方案,但没有任何改变。我在错误引用中发现显示了我使用引擎的那一行。那么我应该以某种方式修改我的引擎吗?
答案 0 :(得分:1)
我无法再次编辑我的评论。
因此,首先您需要将容器组合到一个 docker 网络中,see here。一个示例 docker-compose 看起来像这样:
version: "3.9"
services:
db:
image: postgres:9.6
environment:
- POSTGRES_DB=my database
- POSTGRES_USER=my user
- POSTGRES_PASSWORD=my password
networks:
- backend
web:
build: .
command: python3 manage.py runserver 127.0.0.1:8080
volumes:
- .:/code
ports:
- "8080:8080"
depends_on:
- db
networks:
- backend
networks:
backend:
driver: bridge
name: backend
然后你需要编辑你的django设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'my database',
'USER': 'my user',
'PASSWORD': 'my password',
'HOST': '<your-service-name should be "db">',
'PORT': 5432,
}
}
在您当前的设置中,django 尝试连接到在同一容器中运行的数据库,但事实并非如此。