首页 > 其他分享 >但是将一个项目构建成image的挑战有很多: 依赖、环境变量、绝对路径、网路配置、打包内容.

但是将一个项目构建成image的挑战有很多: 依赖、环境变量、绝对路径、网路配置、打包内容.

时间:2024-10-14 17:22:30浏览次数:1  
标签:meme network app 绝对路径 && docker image 网路

但是将一个项目构建成image的挑战有很多: 依赖、环境变量、绝对路径、网路配置.

比如我具体遇到的报错:

1. 依赖问题: 有一个python package使用的是github安装而不是pypi的包, 所以需要自定义一下conda 导出的依赖

2. 环境变量问题: 后台需要读取环境变量中的文件, 如token、api-url, 但是docker image的环境变量设置不正确

3. 绝对路径: tensor_path, image_path,使用了绝对路径和相对路径, 在docker中不一致, 找不到文件

4. 网络问题: 容器间的网络连接, mongo、redis的host路径不能使用localhost得使用container_name. 容器与宿主机的网络: api监听失败, 容器中的api需要监听所有ip,, 不能监听localhost, 否则端口转发也不会成功.

5. 打包内容: 不能在非docker file上下文中将文件打包到image, 这种情况应该使用mount. 如: 大型model文件不要直接写入image, 应该使用mount的方式.   具体命令
# Use NVIDIA's CUDA image as a base
FROM nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu20.04

# Set the working directory
WORKDIR /app

# 设置 DEBIAN_FRONTEND 环境变量,避免交互
ENV DEBIAN_FRONTEND=noninteractive

# 安装 tzdata 时自动选择时区,避免手动交互
RUN ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime && \
    apt update &&\
    apt-get install -y tzdata && \
    dpkg-reconfigure --frontend noninteractive tzdata
# Install necessary dependencies for conda
RUN apt-get update && apt-get install -y \
    wget \
    bzip2 \
    ca-certificates \
    libglib2.0-0 \
    libxext6 \
    libsm6 \
    libxrender1 \
    git \
    && rm -rf /var/lib/apt/lists/*

# Install Miniconda
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh && \
    bash /tmp/miniconda.sh -b -p /opt/conda && \
    rm /tmp/miniconda.sh
ENV PATH=/opt/conda/bin:$PATH

# Copy the environment file and install dependencies
COPY meme-tg-environment.yml .
RUN conda env create -f meme-tg-environment.yml

# Activate the environment
RUN echo "source activate meme" >> ~/.bashrc
ENV PATH /opt/conda/envs/meme/bin:$PATH
# 定义构建时的参数
ARG TOKEN
ARG API_URL
ENV TOKEN=$TOKEN
ENV API_URL=$API_URL
RUN echo "export TOKEN=$TOKEN" >> ~/.bashrc && \
    echo "export API_URL=$API_URL" >> ~/.bashrc

# Set the working directory to /app
WORKDIR /app

# Install any other project files
COPY . /app
RUN mkdir -p /root/.cache/huggingface/


RUN echo '#!/bin/bash\n\
cd /app/memeapi && python celery_worker.py &\n\
cd /app/memeapi && python main.py &\n\
cd /app/imbot && python main.py &\n\
wait' > /app/start_services.sh

# 给脚本可执行权限
RUN chmod +x /app/start_services.sh

# 容器启动时执行脚本
CMD ["/bin/bash", "/app/start_services.sh"]

 

sudo docker network create meme_network
sudo docker network disconnect bridge 0f6606a9fd35
sudo docker network connect meme_network 0f6606a9fd35
sudo docker network disconnect bridge 04b3f9f0de9e
sudo docker network connect meme_network 04b3f9f0de9e


sudo docker build --build-arg TOKEN=$TOKEN --build-arg API_URL=$API_URL -t meme-cuda-image .
sudo docker run --gpus all -td --network meme_network -p 8000:8000 -v /home/ubuntu/.cache/huggingface/:/root/.cache/huggingface/ --name aibot-meme meme-cuda-image

 

   

标签:meme,network,app,绝对路径,&&,docker,image,网路
From: https://www.cnblogs.com/aibot/p/18464642

相关文章

  • ORB-SLAM ---- Frame::ComputeImageBounds和Frame::AssignFeaturesToGrid()
    文章目录一、Frame::ComputeImageBounds()1.函数作用及讲解2.源码及标注二、Frame::AssignFeaturesToGrid()1.函数作用及讲解2.源码及标注3.调用的函数三、总结一、Frame::ComputeImageBounds()该函数的作用为计算函数边界,仅在第一帧或者标定参数变化后进行图......
  • 网络安全入门教程(非常详细)从零基础入门到精通_网路安全 教程
     前言1.入行网络安全这是一条坚持的道路,三分钟的热情可以放弃往下看了。2.多练多想,不要离开了教程什么都不会了,最好看完教程自己独立完成技术方面的开发。3.有时多百度,我们往往都遇不到好心的大神,谁会无聊天天给你做解答。4.遇到实在搞不懂的,可以先放放,以后再来解决。先科......
  • Splatt3R: Zero-shot Gaussian Splatting from Uncalibrated Image Pairs 论文解读
    目录一、概述二、相关工作1、近期工作2、DUSt3R3、MASt3R三、Splatt3R1、MASt3R的Backbone 2、高斯预测头3、点云与3D高斯参数结合4、3D高斯渲染5、损失函数四、实验 1、对比实验2、消融实验一、概述    该论文首次提出了一种无需任何相机参数和深......
  • [成] ArgoCD + "ArgoCD Image Updater小工具" 实现镜像仓库tag变更自动触发持续集成
    部署思路踩坑整理ArgoCD和ArgoCDImageUpdater是2个不同的程序。"ArgoCDImageUpdater小工具"没有集成在ArgoCD中需要单独部署。单独的ArgoCD能够实现基于git仓库变更作为应用部署的事实来源[参考子页:argocd根据镜像tag变化实现自动发布的2种方式];ArgoCD+"ArgoCDImage......
  • ArgoCD + ArgoCD Image Updater 部署实现
    部署思路踩坑整理1、ArgoCD和ArgoCDImageUpdater是2个不同的程序。"ArgoCDImageUpdater小工具"没有集成在ArgoCD中需要单独部署。2、单独的ArgoCD能够实现基于git仓库变更作为应用部署的事实来源[参考子页:argocd根据镜像tag变化实现自动发布的2种方式];ArgoCD+"ArgoCD......
  • WPF Image display webp via BitMapImgae BeginInit UriSource EndInit in MVVM
    privatevoidGenenerateBitMapImageViaUrl(stringurl){BitmapImagebmi=newBitmapImage();bmi.BeginInit();bmi.UriSource=newUri(url,UriKind.RelativeOrAbsolute);bmi.EndInit();if(bmi.CanFreeze){bmi.Freeze();}......
  • FreeImage裁剪输出
    #include<iostream>#include"FreeImage.h"bool   SaveToFile(intm_originW,intm_originH,char*FileName,BYTE*pBuf,intnWidth,intnHeight){         FIBITMAP*bitmap=NULL;   FREE_IMAGE_FORMATfif=FIF_JPEG;   int       flag......
  • GeoKR系列--Geographical Knowledge-Driven Representation Learning for Remote Sens
    一、abstract1.绝大多数遥感图像仍未标注,想要充分利用这些未标注的图像,本文提出了一种基于地理知识驱动的表示学习方法,使得提升遥感图像的网络性能+减少对标注数据的需求。2.本文将全球地表覆盖产品和与每张遥感图像相关的地理位置视为地理知识,为了消除遥感图像与地理知识之......
  • 图床搭建与工作流优化全方位集成教程:EasyImages2.0与七牛云的搭建与配置+通过 PicGo
    1.准备搭建–简单图床——EasyImage2.01.1前言无意中网上冲浪的时候,发现了一个叫做简单图床——EasyImage的图床,很好用,搭建也很简单。特别鸣谢简单图床——EasyImage作者大大。1.2特点支持WebP格式转换支持仅登录后上传支持设置图片质量支持文字/图片水印支持设置......
  • 图像分割(Image segementation)
    图像分割(ImageSegmentation)是指在计算机视觉和图像处理领域中,将一幅图像分割成多个具有不同语义或特征的区域,这些区域通常是连续的像素集合,并且每个区域内包含的像素在某些属性上是相似的。这一过程旨在识别图像中的各个对象或者背景,为后续的图像分析、物体识别与跟踪、三维重建......