在 Docker中部署SANIC
使用c++的动态库出现运行容器马上停止
查看报错日志:
docker logs 容器ID
显示: No such file or directory (needed by /sanic/xxx.so)
目录结构
├── Dockerfile
├── xxx.so
└── server.py
server.py 内容:
from sanic import Sanic
from sanic.response import json
import ctypes
ll = ctypes.cdll.LoadLibrary
lib = ll('./xxx.so')
lib.Loginfo()
app = Sanic(__name__)
@app.route("/")
async def index(request):
return json({'Hello World!':'nihao!'})
@app.route("/cgi-bin/clicklog", methods=['POST'])
async def click(request):
str_data = str(request.json)
lib.DataStr(str_data.encode('ascii'))
return json({})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000, fast=True, access_log=False, debug=False)
Dockerfile 文件内容:
#FROM python:3.8 #获取python环境python900M左右
FROM python:3.8.13-slim #python较小130M左右
WORKDIR /sanic #在docker中创建sanic文件夹
COPY . /sanic # . 表示Ubuntu当前文件夹下所有文件 /sanic表示docker下文件夹,将本地所有文件拷贝到docker的/sanic文件夹下
#RUN pip3 install git+https://github.com/channelcat/sanic #下载sanic的环境,多尝试几次
RUN python3.8 -m pip install sanic #下载sanic环境
EXPOSE 8000 #打开容器的8000端口
CMD ["python", "server.py"] #运行命令
前提Docker已经安装成功:
docker build -t my-sanic-image . #创建镜像,追后有个 . 别忽略了
docker run --name mysanic -p 8000:8000 -d my-sanic-image #创建并且执行容器
注意:安装sanic时候可能会失败,多尝试几次,需要将出错镜像删除
查看现有的镜像文件
docker images

查看docker容器是否运行:
如果正在运行需要将容器停止并且删除
docker ps #查看容器是否运行
docker stop 容器ID #停止容器
docker ps -a #查看所有容器
删除docker容器:
docker rm 容器ID
删除未安装成功的镜像:
(36表示IMAGE ID 可以只使用几位就行)
docker image rm 36
本文介绍了在Docker环境下部署使用Sanic框架的Python服务时,遇到C++动态库加载失败的问题。通过查看日志发现错误为'Nosuchfileordirectory'(neededby/sanic/xxx.so)。问题出在动态库路径不正确。Dockerfile中已设置将本地文件复制到Docker容器内,并配置了暴露8000端口和运行server.py。解决方法是确保xxx.so文件与server.py在同一目录下并正确引用。

被折叠的 条评论
为什么被折叠?



