postgresql - 从 Docker 容器连接到本地 postgres 数据库
问题描述
我的任务是编写一个从远程计算机接收信息的脚本,并将接收到的信息记录在本地 Postgres 数据库中。测试成功。数据来了,数据库更新了。
下一步是将此脚本放置在 docker 容器中。Dockerfile 和 Docker-Compose.yml 附在下面。我通过 Volume 将带有工作程序的环境添加到容器中。docker 容器在 postgres 数据库所在的本地机器上运行。postgres + psycopg2: // postgres: hi123 @ localhost: 5432 /
当我运行图像时,我控制程序的工作流程并观察从远程计算机接收到的数据,但不会发生将消息写入地址的 postgres 数据库 - Back。
如何解决将 docker 容器连接到本地数据库的问题?
=---------Dockerfile---------=
FROM python:latest
WORKDIR /backend
COPY requirements.txt /backend/
RUN pip install -r requirements.txt
=----------------------------=
=-----Docker-compose.yml-----=
version: '3'
services:
back:
image: git_rep_2_back:latest
environment:
- PYTHONPATH=/backend/
volumes:
- "./Platform:/backend"
command: bash -c "cd server && python launcher.py"
=-----------------------------=
=-------configfile_for_connection_to_database-------=
postgres+psycopg2://postgres:hi123@localhost:5432/Back
=---------------------------------------------------=
解决方案
问题是您试图从容器内连接到“localhost”。通俗地说,“localhost”是指“这台计算机”或“我正在使用的计算机”。所有对 localhost 的请求都将被重定向回侦听 localhost 接口的任何进程。容器内部的接口与容器外部的localhost
接口不同。localhost
在这种情况下,您应该考虑让您的数据库监听0.0.0.0
或监听您机器的 IP 地址。然后,在容器中,您可以使用您机器的 IP 地址连接到您的数据库。
希望这可以帮助!
推荐阅读
- c# - 在 C# 中覆盖索引器和使用方法
- typescript - 向已编译的打字稿文件添加前导注释
- javascript - Javascript按复合键排序obj
- azure-active-directory - Microsoft 图形 API 使用客户端密码使用令牌身份验证发送电子邮件。我已将令牌粘贴到 https://jwt.ms/ 但缺少范围
- reactjs - 有 url 参数时路由不匹配
- firebase - Firebase Firestore 安全规则 - 根据资源读取所有嵌套文档(但它为空)
- python - os.system('TASKKILL /F /IM EXCEL.exe') 在 python 中
- r - 将数据标签添加到 ggplot 图例
- python - 在 pycharm 中安装包
- c++ - 从标准输入或 C++ 中的文件透明读取?