You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker中Jupyter Notebook的PySpark连接本地PostgreSQL失败求助

问题排查与解决方案

核心原因

Docker容器内的localhost指向容器自身,而非你的Windows主机,因此代码中用localhost无法访问安装在Windows上的PostgreSQL服务。

具体解决步骤

1. 修改JDBC连接地址

将代码中的URL替换为Docker访问Windows主机的专用地址host.docker.internal,或者Windows主机的实际IPv4地址:

# 替换为Docker专用地址
url = "jdbc:postgresql://host.docker.internal:5432/local_database"

# 或者使用Windows主机的实际IP(通过ipconfig查看以太网适配器的IPv4地址)
# url = "jdbc:postgresql://192.168.x.x:5432/local_database"

2. 修正PostgreSQL配置(确保生效)

  • 修改postgresql.conf:将listen_addresses设为*,允许所有IP访问
    listen_addresses = '*'
    
  • 确认pg_hba.conf的规则已正确添加:
    host all all 0.0.0.0/0 md5
    
  • 重启PostgreSQL服务(修改配置后必须重启才能生效)

3. 检查Windows防火墙

确保Windows防火墙允许PostgreSQL服务的5432端口入站连接:

  • 打开Windows Defender防火墙 → 高级设置 → 入站规则
  • 新建规则,允许TCP端口5432的连接

4. 验证容器到主机的连通性

进入Docker容器内部,执行以下命令测试:

# 测试主机地址是否可达
ping host.docker.internal

# 测试5432端口是否开放
telnet host.docker.internal 5432
# 或者用nc(若容器内已安装)
nc -zv host.docker.internal 5432

完整修改后的代码片段

from pyspark.sql import SparkSession
from pyspark.sql.functions import lit, col, explode
import pyspark.sql.functions as f

spark = SparkSession.builder.appName("ETL Pipeline").config("spark.jars", "./postgresql-42.7.1.jar").getOrCreate()
df = spark.read.text("./Data/WordData.txt")

df2 = df.withColumn("splitedData", f.split("value"," "))
df3 = df2.withColumn("words", explode("splitedData"))
wordsDF = df3.select("words")
wordCount = wordsDF.groupBy("words").count()

driver = "org.postgresql.Driver"
# 修改后的URL
url = "jdbc:postgresql://host.docker.internal:5432/local_database"
table = "word_count"
user = "postgres"
password = "12345"

wordCount.write.format("jdbc") \
    .option("driver", driver) \
    .option("url", url) \
    .option("dbtable", table) \
    .option("mode", "append") \
    .option("user", user) \
    .option("password", password) \
    .save()

spark.stop()

内容的提问来源于stack exchange,提问作者Roterun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:05:22