gpt4 book ai didi

python - 如何使用 DATABASE_URL 将 Docker 容器连接到在本地主机上运行的 PostgreSQL?

转载 作者:行者123 更新时间:2023-11-29 14:33:09 29 4
gpt4 key购买 nike

我正在关注 Aptible Django Quickstart Tutorial其中描述了如何创建和部署应用程序 Aptible 的 PaaS。我还希望能够在本地使用 Django 应用程序运行 Docker 容器并连接到本地 PostgreSQL 数据库,但是,我不清楚如何执行此操作。

Django 应用程序的 Dockerfile 是:

FROM python:3.6

# System prerequisites
RUN apt-get update \
&& apt-get -y install build-essential libpq-dev \
&& rm -rf /var/lib/apt/lists/*

# If you require additional OS dependencies, install them here:
# RUN apt-get update \
# && apt-get -y install imagemagick nodejs \
# && rm -rf /var/lib/apt/lists/*

# Install Gunicorn. If Gunicorn is already present in your requirements.txt,
# you don't need that (but if won't hurt).
RUN pip install gunicorn

ADD requirements.txt /app/
WORKDIR /app
RUN pip install -r requirements.txt

ADD . /app

EXPOSE 8000

CMD ["gunicorn", "--access-logfile=-", "--error-logfile=-", "--bind=0.0.0.0:8000", "--workers=3", "mysite.wsgi"]

mysite 是 Django 应用程序的名称。它的 settings.py 使用 dj-database-url如下:

import dj_database_url
DATABASES = {'default': dj_database_url.config()}

为了连接到 PostgreSQL 的本地实例,我似乎应该遵循 Allow docker container to connect to a local/host postgres database 上的 Docker for Mac 解决方案 :

docker run -e DB_PORT=5432 -e DB_HOST=docker.for.mac.host.internal

但是,如果我尝试这样做,我仍然会收到以

结尾的错误
  File "/usr/local/lib/python3.6/site-packages/psycopg2/__init__.py", line 130, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
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: Cannot assign requested address
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?

在我看来,当前配置的应用程序没有对 DB_PORTDB_HOST 环境变量“做任何事情”,因为它正在一次性读取这些来自 DATABASE_URL。这是问题吗?如果是这样,我如何在仍然使用 DATABASE_URL 的同时解决这个问题,因为这似乎是 Aptible 的“接口(interface)”?

最佳答案

我设法通过更改 .env 文件中的 DATABASE_URL 来解决问题

DATABASE_URL=postgres://my_app:my_password@localhost/my_database

DATABASE_URL=postgres://my_app:my_password@docker.for.mac.host.internal/my_database

然后运行我标记为 lucy_web 的容器,如下所示:

docker run -p 8000:8000 --env-file .env lucy_web

没有必要在我的 postgresql.conf 中将 listen_addresses 更改为 '*';这仍然是默认值,localhost。 (我相信这是因为 -p 8000:8000 参数将 localhost 上的端口 8000 映射到容器)。

关于python - 如何使用 DATABASE_URL 将 Docker 容器连接到在本地主机上运行的 PostgreSQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48630545/

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