Docker环境下Pandas读取CSV报FileNotFoundError问题求助
Docker容器中读取CSV文件及连接PostgreSQL的问题解决
一、CSV文件找不到的问题
容器是独立的隔离环境,宿主机的/Users/myname/Downloads目录不会自动映射到容器内部,所以代码里的绝对路径在容器中不存在,导致FileNotFoundError。
解决方法有两种:
方法1:将CSV文件复制到容器内
修改你的Dockerfile,添加COPY指令把CSV文件同步到容器中:
FROM python:3.8 # 把本地的CSV文件和main.py都复制到容器工作目录 COPY file511282022.csv . COPY main.py . RUN pip install requests pandas sqlalchemy CMD ["python","./main.py"]
同时修改main.py中的文件路径为容器内的相对路径:
df = pd.read_csv(r"./file511282022.csv", names=columns)
注意:构建镜像时,要确保CSV文件和Dockerfile、main.py在同一个文件夹下。
方法2:用Docker挂载卷(推荐,适合文件需要更新的场景)
不需要修改Dockerfile,运行容器时通过-v参数把宿主机的Downloads目录挂载到容器内的指定路径:
docker run -v /Users/myname/Downloads:/app/csv 你的镜像名称
然后修改main.py中的文件路径为容器内的挂载路径:
df = pd.read_csv(r"/app/csv/file511282022.csv", names=columns)
二、PostgreSQL连接失败的潜在问题
你的main.py中用localhost:5432连接数据库,但容器内的localhost指向容器自身,而PostgreSQL运行在宿主机上,后续会出现连接失败的问题,提前解决:
- 把连接地址改成宿主机的实际IP(比如
192.168.1.100,根据你的网络配置调整):engine = create_engine('postgresql://postgres:mypassword@192.168.1.100:5432/postgres') - 如果用Docker Compose管理服务,可以把PostgreSQL和Python服务放在同一个Docker网络中,直接用PostgreSQL的服务名作为主机名连接。
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

