使用docker容器内的anaconda虚拟环境启动python web项目

news2024/10/7 4:30:51

1、环境安装

1.1 基础镜像

这里以ubuntu18.04 + cuda 11.8为基础镜像(主机支持nvidia-gpu)

(1)拉取ubuntu18.4 + cuda11.8镜像
docker pull nvidia/cuda:11.8.0-devel-ubuntu18.04

1.2 docker下anaconda安装 

(1)下载Anaconda安装包
## 从anaconda的镜像网站(Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror)下载安装包。
我下载的版本:Anaconda3-2023.07-0-Linux-x86_64.sh,并保存在本地D:/runback/test/Anaconda3-2023.07-0-Linux-x86_64.sh

(2)启动容器
## 这里使用-v指定了卷的映射,确保虚拟linux下可以访问Anaconda安装包
docker run --gpus all -it -v /mnt/d/runback/test:/faiss-gpu/ --name faiss-gpu  nvidia/cuda:11.8.0-devel-ubuntu18.04 /bin/bash

(3)在容器内安装anaconda3
## 参考:Linux安装conda - 知乎 (zhihu.com)
# 切到/faiss-gpu目录下
cd /faiss-gpu

# 安装包执行
bash Anaconda3-2023.07-0-Linux-x86_64.sh

(4)添加环境变量
export PATH=$PATH:/root/anaconda3/bin

(5)删除安装包
rm /faiss-gpu/Anaconda3-2023.07-0-Linux-x86_64.sh

1.3 其他依赖包安装

这里只简单做个flask的demo,所以只安装flask即可。

pip install flask

2、web项目

创建一个api.py文件:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project :xx
@Author  :xx
@Date    :2023/8/11
@Desc    :
'''

from flask import Flask, request
import logging

app = Flask(__name__)


@app.route('/hello')
def hello():
    return "你好啊~hello world!"


if __name__ == '__main__':
    # 启动服务
    ip = "0.0.0.0"
    port = 5000
    logging.info('启动服务, ip地址:{}, 端口:{}'.format(ip, port))
    app.run(host=ip, port=port, debug=True, use_reloader=False)

3、启动命令

docker run -p 7000:5000 -dit --name faiss -v /mnt/d/runback/test:/faiss-gpu conda-faiss-gpu /bin/bash -c "source /root/anaconda3/bin/activate && conda activate base && python /faiss-gpu/api.py"

 其中:

/mnt/d/runback/test 是我的api.py文件所在的目录;

/faiss-gpu 是映射后的容器工作目录;

/root/anaconda3/ 是我的anaconda安装包所在的位置。

4、服务测试

(1) 【通用】使用docker所在主机ip

(2) 特殊

如果你是在windows安装了wsl2,并在wsl2的虚拟linux终端内安装的docker。wsl2可支持直接使用localhost来访问虚拟终端内的docker服务。

5、问题

我同时启动了三个容器,分别用"-p 7000:5000"、"-p 6000:5000"、"-p 5000:5000",但只有localhost:6000/hello服务,浏览器一直访问不到。

问题排查:

可以看到6000中出现一个和5000、7000不同的pid=5144。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/976949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

10|山水诗词:给自己一座精神的“辋川”

好诗相伴,千金不换。你好,我是天博。 前面三讲中,我们在“见古今”的主题里,讨论了诗词中流传下来的三种精神,侠义精神、文人风骨和家国情怀。从这一讲开始,我们进入了“见天地”的主题,一起来…

Vue项目案例-头条新闻

目录 1.项目介绍 1.1项目功能 1.2数据接口 1.3设计思路 2.创建项目并安装依赖 2.1创建步骤 2.2工程目录结构 2.3配置文件代码 3.App主组件开发 3.1设计思路 3.2对应代码 4.共通组件开发 4.1设计思路 4.2对应代码 5.头条新闻组件开发 5.1设计思路 5.2对应代码 …

Android -BLE 蓝牙模块开发

Android-Ble蓝牙开发Demo示例–扫描,连接,发送和接收数据,分包解包(附源码) - 简书前言 万物互联的物联网时代的已经来临,ble蓝牙开发在其中扮演着举重若轻的角色。最近刚好闲一点,抽时间梳理下这块的知识点。 涉及ble蓝牙通讯的客户端(开启、扫描、连接…

【OLED驱动】:stm32F103的四线模拟IIC驱动的0.96寸OLED屏幕显示数字,字母,汉字,图片的例程

文章目录 前言 一、四线OLED是什么? 二、IIC原理 1.四线0.96寸OLED是IIC驱动来实现显示 2.IIC协议的OLED屏幕 3.STM32驱动代码 4.IIC使用代码 总结 前言 最近在做一个开源方案 — 平衡车,即将开源硬件和软件,会在CSDN上开源&#xff0…

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记

大家好, Capybara 继续与大家一起学习Vue框架。书读百遍其义自见。 day06 路由进阶 路由模块封装 router/index.js 所抽离内容包括:导入组件、(额外需要)导入Vue、导入VueRouter插件、 创建路由对象、导出路由对象 需要注意路径…

上线检查工具(待完善)

根据V11《CEBPM系统上线CheckList》整理而得,适用于V11,DHERP,Oracle和MSSQL数据库,检查内容还不完善。 上图: 1)数据库连接 2)双击[连接别名],可选择历史连接 3)主界面…

若依 MyBatis改为MyBatis-Plus

主要内容:升级成mybatis-plus,代码生成也是mybatis-plus版本 跟着我一步一步来,就可完成升级! 检查:启动程序,先保证若依能启动 第一步:添加依赖 这里需要在两个地方添加,一个是最…

CSRF攻击原理及防护

CSRF攻击原理及防护 0x01 CSRF是什么 ssrf 服务端请求伪造 CSRF全称为跨站请求伪造(Cross-site request forgery),是一种网络攻击方式,也被称为 one-click attack 或者 session riding。 0x02 CSRF攻击原理 CSRF攻击利用网站…

flutter架构全面解析

Flutter 是一个跨平台的 UI 工具集,它的设计初衷,就是允许在各种操作系统上复用同样的代码,例如 iOS 和 Android,同时让应用程序可以直接与底层平台服务进行交互。如此设计是为了让开发者能够在不同的平台上,都能交付拥…

智慧公厕三大数字化远景,畅通数字化循环、夯实数字化基建、开创数字化创新

智慧公厕:实现数字化远景,提升公厕使用、建设与管理的创新之路 在现代社会中,公厕作为城市基础设施的重要组成部分,对城市形象和居民生活质量有着重要影响。然而,一些传统公厕管理的繁琐和配置设施的陈旧,…

centos7升级openssh版本

linux升级openssh版本,升级到8.6p1 小白教程,一看就会,一做就成。 1.下载rpm包 2.编写一键安装脚本(然后执行) #把所有的rpm包,我都放到了/ydy目录,下面安装时,也指定了这个目录 #编…

Golang-GJSON 快速而简单的方法来从 json 文档获取值

GJSON 是一个 Go 包,它提供了一种快速而简单的方法来从 json 文档获取值。它具有单行搜索、点符号路径、迭代和解析 json 行等功能。 GJSON 也可用于Python和Rust 入门 安装中 要开始使用GJSON 请安装 Go 并运行 go get : $ go get -u github.com/ti…

HarmonyOS开发:走进静态共享包的依赖与使用

前言 在上一篇,我们进行了动态共享包的开发和使用,由于动态共享包有一定的局限性,比如,调用共享包资源还得要通过工具类进行调用,再比如仅用于应用内部代码、资源的共享,如果我想要开源,以远程依…

STM32纯中断方式发送接收数据(串行通信;keil arm5;)

除了main文件其他文件均无修改,正常运行--在keil arm5内

【腾讯云Cloud Studio实战训练营】戏说cloud studio

文章目录 前言产品概述项目体验登录空间模板模板项目体验 总结 前言 在奇幻世界中,存在着一片神秘的云海,被人们称为腾讯云云端开发环境 Cloud Studio。这片云海是一座巨大的浮岛,上面漂浮着一个集成式开发环境(Integrated Devel…

2023年行研行业研究报告

第一章 行业概述 1.1 行研行业 行业定义为同一类别的经济活动,这涉及生产相似产品、应用相同生产工艺或提供同类服务的集合,如食品饮料行业、服饰行业、机械制造行业、金融服务行业和移动互联网行业等。 为满足全球金融业的需求,1999年8月…

指针练习(2)

1. int main() {int a[5][5];int(*p)[4];p a;printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);return 0; } 解析:a是一个5行5列的二维数组,而p是一个访问4个元素的数组指针,将数组a的首元素地址也…

【开发问题系列】CSV转Excel

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

innovus: 加IO buffer

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 set fid [open $net_file w] foreach port_name $input_ports { set net [get_nets -q -of_object [get_ports $port_name]] set net_name [get_attribute $net full_name] …

python实现对excel表中的某列数据进行排序

如下需要对webCms中的B列数据进行升序排序,且不能影响到其他列、工作表中的数据和格式。 import pandas as pd import openpyxl from openpyxl.utils.dataframe import dataframe_to_rows# 读取 Excel 文件 file_path 1.xlsx sheet_name webCms# 读取 Excel 文件并…