我正在尝试将在docker容器内运行的Django应用程序连接到在另一台计算机上运行的PostgreSQL数据库(假设IP地址为192.168.1.22)。到目前为止,在我的实验中,我总是在尝试从docker容器连接到PostgreSQL实例时遇到以下错误(我的代码在docker容器之外工作正常):
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port 5432?
我确保允许所有到PostgreSQL数据库的入站连接(通过按照建议here更改我的PostgreSQL服务器的配置文件。
以下是我的Django应用程序中用于数据库连接的设置代码:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'xxxxx',
'USER': 'xxxxxxx',
'PASSWORD': 'xxxxxxxxxxx',
'HOST': '192.168.1.22',
'PORT': '5432',
}
}
这是我的Dockerfile:
FROM python:3.6
ENV PYTHONUNBUFFERED 1
# Install dependencies
RUN mkdir /config
ADD /config/requirements.pip /config/
RUN pip install -r /config/requirements.pip
# Install source code
RUN mkdir /src
WORKDIR /src
COPY ./src/ /src/
ENV UWSGI_WSGI_FILE=/src/xxxxxxxxx/wsgi.py UWSGI_HTTP=:8000 UWSGI_MASTER=1 UWSGI_WORKERS=2 UWSGI_THREADS=8 UWSGI_UID=1000 UWSGI_GID=2000 UWSGI_LAZY_APPS=1 UWSGI_WSGI_ENV_BEHAVIOR=holy
RUN python /src/manage.py collectstatic --noinput
EXPOSE 8000
CMD ["uwsgi", "--http-auto-chunked", "--http-keepalive"]
这是我用来构建(和运行)我的docker容器的脚本:
#!/bin/bash
docker build .
docker run -i -t -p 8000:8000 xxxx/xxxxxxx
我也尝试使用Docker的add-host选项将数据库添加为主机,然后从我项目的设置文件中引用主机名。在所有情况下,我最终都会遇到相同的错误。
提前感谢您的帮助!
答案 0 :(得分:0)
我使用extra_hosts
和Docker-compose
例如
web:
image: my-web-app
build: .
command: bash -c "uwsgi --http-auto-chunked --http-keepalive"
ports:
- "8000:8000"
extra_hosts:
- "postgresql:192.168.1.22"
在您的Django配置中
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'xxxxx',
'USER': 'xxxxxxx',
'PASSWORD': 'xxxxxxxxxxx',
'HOST': 'postgresql',
'PORT': '5432',
}
要使用docker-compose up