繁体   English   中英

无法从Docker容器中运行的Django应用连接到远程PostgreSQL实例

[英]Cannot connect to remote PostgreSQL instance from Django app running within Docker container

我正在尝试将在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数据库的入站连接(通过按照此处的建议更改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选项将数据库添加为主机,然后从我的项目的设置文件中引用主机名。 在所有情况下,我最终都会遇到上述相同的错误。

预先感谢您的帮助!

我使用extra_hostsDocker-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

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM