爬虫flask接口打包成docker镜像遇到的问题

本篇作为笔记。
错误提示:

selenium selenium.common.exceptions.WebDriverException: Message: unknown error: session deleted because of page crash from unknown error: cannot determine loading status

#3 0x5646cbacaac6 <unknown>
#4 0x5646cbac9cff <unknown>
#5 0x5646cbac9b10 <unknown>
#6 0x5646cbac86f4 <unknown>
#7 0x5646cbac8c4c <unknown>
#8 0x5646cbad5e9d <unknown>
#9 0x5646cbad6b92 <unknown>
#10 0x5646cbae7c40 <unknown>
#11 0x5646cbaec274 <unknown>
#12 0x5646cbac9219 <unknown>
#13 0x5646cbae77df <unknown>
#14 0x5646cbb57772 <unknown>
#15 0x5646cbb3e443 <unknown>
#16 0x5646cbb0f3c5 <unknown>
#17 0x5646cbb10531 <unknown>
#18 0x5646cbd6ddce <unknown>
#19 0x5646cbd71192 <unknown>
#20 0x5646cbd5293e <unknown>
#21 0x5646cbd72103 <unknown>
#22 0x5646cbd45d85 <unknown>
#23 0x5646cbd930a8 <unknown>
#24 0x5646cbd93239 <unknown>
#25 0x5646cbdae492 <unknown>
#26 0x7f40e2af9609 start_thread

前提说明:

1、使用selenium对目标网站进行数据抓取,结合flask写的接口,现在要打包成docker镜像测试。
2、在测试过程中发现:对接口进行请求,该接口调用对应的函数使用selenium获取目标网站上的数据是发生了上面的错误提示。重点是:selenium selenium.common.exceptions.WebDriverException: Message: unknown error: session deleted because of page crash from unknown error: cannot determine loading status

然后找了好久看到了一篇文章介绍的解决方法:
https://www.jianshu.com/p/aa7d289d858f
这里面说了是因为:shm_size 的问题,然后采取了该文章的改进方式,在启动docker的时候,命令由:

docker run -p 8045:4060  -e port=4060  flask_demo:v1.1

改为:

docker run -p 8045:4060 -it --shm-size="2g" -e port=4060 flask_demo:v1.1  

就成功解决了该问题。
关于的设置还有一种方式是修改配置文件,这个博主有介绍可以参考:https://blog.csdn.net/baobei0112/article/details/132275770

记录一下常用的docker命令:

# 将docker中的文件保存到本地一份
docker ps  #  获取正在运行的dockerid
docker docker_id:docker目录 本地目录

# 将本地文件上传到docker当中
docker ps  #  获取正在运行的dockerid
docker 本地目录 docker_id:docker目录

# 打包docker镜像
docker images   # 查看dockerid
docker save docker_id > 本地目录

# 上传进项到仓库
docker login  #  登录,需输入账号密码

# 1、将容器只作为镜像 
docker commit 容器名 镜像名
# 2、标记到个人仓库
docker tag 镜像名 username/仓库名称:targname
例如:docker tag a_test:v1.0 wow28218/pyflink:a   # 这里的a即上传的a_test在仓库中的名字
# 3、上传
docker push username/仓库名称:targname
例如:docker push wow28218/pyflink:a
# 扩充:2、3合并为一步
docker commit a_test wow28218/pyflink:a
# 4、下载镜像
docker pull wow28218/pyflink:a
或
docker tag wow28218/pyflink:a my_test:latest      #  拉取下来并修改名称

Dockerfile编写

# 使用 Selenium 的 Chrome 镜像作为基础镜像 107版本在网站的第22页
FROM selenium/standalone-chrome:107.0.5304.87-chromedriver-107.0.5304.62


# 安装 Python 和相关依赖
USER root
RUN apt-get update && \
    apt-get install -y \
    software-properties-common \
    curl

# 添加 Python PPA 和安装 Python 3.10
RUN add-apt-repository ppa:deadsnakes/ppa && \
    apt-get update && \
    apt-get install -y \
    python3.10 \
    python3.10-distutils

# 安装 pip
RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \
    python3.10 get-pip.py

# 设置 Python 3.10 为默认的 Python 版本
RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1 && \
    update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1 && \
    update-alternatives --install /usr/bin/pip pip /usr/local/bin/pip 1

# 检查 Python 和 pip 版本
RUN python --version && pip --version



# 设置工作目录
WORKDIR /mycode

 
# 复制当前目录下的内容到容器中的/mycode
COPY . /mycode

USER root
RUN apt-get update && \
    apt-get install -y python3-pip
RUN pip install  -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

# 暴露应用程序端口
EXPOSE 5050


# 设置环境变量,指定Flask应用的模块
#ENV FLASK_APP app.py
ENV host 0.0.0.0
ENV port 5050
ENV debug True
ENV proxy None
ENV context /

# 设置容器启动时默认执行的命令
ENTRYPOINT ["sh","-c","python3 run_flask_demo.py --host ${host} --port ${port} --debug ${debug} --proxy ${proxy} --context ${context}"]
#CMD ["python3", "run_flask_demo.py", "--host", "${host}", "--port", "${port}", "--debug", "${debug}", "--proxy", "${proxy}", "--context", "${context}"]
#CMD python3 run_flask_demo.py --host $host --port $port --debug $debug --proxy $proxy --context $context

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值