如何将.exe格式Python应用适配Ubuntu后打包Docker镜像并实现外部文件读写?
1 适配Ubuntu的程序转换与Docker镜像构建
你手上的.exe是Windows平台下的可执行文件,确实无法直接在Ubuntu系统运行,两种方案可选:
1.1 最优方案:直接基于源码构建镜像(无需单独打包可执行)
该方案步骤最少,适配性最高:
- 先准备打包exe前的Python源码文件、依赖清单
requirements.txt,如果没有依赖清单可在原开发环境执行pip freeze > requirements.txt生成 - 在项目根目录编写Dockerfile,示例如下:
# 选用Ubuntu 22.04作为基础镜像 FROM ubuntu:22.04 # 安装Python3与pip,清理缓存减小镜像体积 RUN apt update && apt install -y python3 python3-pip && rm -rf /var/lib/apt/lists/* # 设置容器内工作目录 WORKDIR /app # 复制依赖清单并安装依赖 COPY requirements.txt . RUN pip3 install --no-cache-dir -r requirements.txt # 复制Python源码到镜像内 COPY your_script.py . # 容器启动默认执行的命令 CMD ["python3", "your_script.py"]
- 执行镜像构建命令:
docker build -t your_image_name .即可完成镜像制作
1.2 可选方案:打包为Ubuntu平台可执行文件后构建镜像
如果需要镜像内不携带Python运行环境,可先打包Linux版可执行文件:
- 准备一个Ubuntu环境(虚拟机/临时容器均可),安装PyInstaller后执行
pyinstaller -F your_script.py,生成的二进制可执行文件默认存放在dist目录下,该文件可直接在Ubuntu系统运行 - 编写简化版Dockerfile:
FROM ubuntu:22.04 WORKDIR /app COPY dist/your_script . CMD ["./your_script"]
- 同样执行
docker build命令即可完成镜像构建
2 宿主机文件挂载方案
Docker提供绑定挂载功能,可直接将宿主机的目录映射到容器内部,无需修改镜像即可实现外部文件读写:
- 先在宿主机上创建两个目录,例如
./input(存放输入文件)、./output(存放输出结果) - 调整Python脚本的读写路径:统一从容器内的
/app/input目录读取输入,将结果写入容器内的/app/output目录;如果不想修改脚本,也可以直接将宿主机目录映射到脚本中原有读写路径的位置 - 运行容器时添加挂载参数,示例命令如下:
docker run -v ./input:/app/input -v ./output:/app/output your_image_name
后续更新输入文件时,只需将新文件放入宿主机的./input目录,重新运行容器即可,无需重建镜像或容器,输出结果会自动保存在宿主机的./output目录,不会随容器删除丢失。
内容的提问来源于stack exchange,提问作者rishab ajain445
相关产品推荐
相关产品推荐

