Docker容器部署Python3.8与MongoDB失败及备份验证咨询
解决Docker容器构建失败问题及备份功能验证
错误原因
mongo:4.0.4 基于Debian 9(Stretch),该系统的官方软件源中没有Python 3.8的包,直接通过apt-get安装会导致定位包失败,需要通过源码编译的方式安装Python 3.8。
修改后的Dockerfile配置
FROM mongo:4.0.4 # 安装编译Python所需的依赖工具 RUN apt-get update && apt-get install -y --no-install-recommends \ wget \ build-essential \ libssl-dev \ zlib1g-dev \ libncurses5-dev \ libncursesw5-dev \ libreadline-dev \ libsqlite3-dev \ libgdbm-dev \ libdb5.3-dev \ libbz2-dev \ libexpat1-dev \ liblzma-dev \ tk-dev \ uuid-dev \ && rm -rf /var/lib/apt/lists/* # 编译安装Python 3.8 RUN wget https://www.python.org/ftp/python/3.8.17/Python-3.8.17.tgz && \ tar -xf Python-3.8.17.tgz && \ cd Python-3.8.17 && \ ./configure --enable-optimizations && \ make -j$(nproc) && \ make altinstall && \ cd .. && \ rm -rf Python-3.8.17.tgz Python-3.8.17 # 安装pip并配置软链接 RUN wget https://bootstrap.pypa.io/get-pip.py && \ python3.8 get-pip.py && \ rm get-pip.py && \ ln -s /usr/local/bin/python3.8 /usr/local/bin/python3 && \ ln -s /usr/local/bin/pip3.8 /usr/local/bin/pip3 # 安装pymongo RUN pip3 install pymongo EXPOSE 27017 # 创建应用目录并设置卷 RUN mkdir -p /app/src /app/dump VOLUME ["/app/src", "/app/dump", "/data/db", "/var/www/html"] CMD ["/bin/bash"]
注:原docker-compose.yml配置无需修改,可直接使用
验证备份功能正常
1. 启动容器
执行构建并启动容器:
docker-compose up -d --build
2. 进入容器并创建测试数据
进入容器内部:
docker-compose exec py-mongo bash
连接MongoDB并插入测试数据:
mongo -u root -p 1234 admin use testdb db.testcol.insertOne({"name": "demo", "value": 456}) exit
3. 执行备份命令
在容器内执行备份,将压缩备份文件保存到挂载的/app/dump目录:
mongodump --archive=/app/dump/backup.tar.gz --gzip -u root -p 1234 --authenticationDatabase admin
4. 验证备份文件同步到主机
退出容器后,查看主机的dump目录:
ls ./dump
若能看到backup.tar.gz文件,说明主机与容器的目录挂载正常。
5. 验证备份可恢复
再次进入容器,先删除测试数据库再恢复备份:
docker-compose exec py-mongo bash # 删除测试库 mongo -u root -p 1234 admin --eval "db.dropDatabase('testdb')" # 恢复备份 mongorestore --archive=/app/dump/backup.tar.gz --gzip -u root -p 1234 --authenticationDatabase admin # 检查数据是否恢复 mongo -u root -p 1234 admin --eval "use testdb; db.testcol.find()"
若输出结果中能看到之前插入的{"name": "demo", "value": 456}数据,说明备份恢复功能正常。
内容的提问来源于stack exchange,提问作者Bosser445
相关产品推荐
相关产品推荐

