构建Django的Web镜像

构建Django的Web镜像

文章目录

1.前提

  • 已经在环境上安装了Docker

2.步骤

  • 1.拉取最新代码

    bash 复制代码
    git clone https://github.com/lp1506947671/recruitment.git
  • 2.指定manage.py中读取的Django配置文件来源为os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.local")

    python 复制代码
    #!/usr/bin/env python
    """Django's command-line utility for administrative tasks."""
    import os
    import sys
    
    
    def main():
        """Run administrative tasks."""
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.local")
        try:
            from django.core.management import execute_from_command_line
        except ImportError as exc:
            raise ImportError(
                "Couldn't import Django. Are you sure it's installed and "
                "available on your PYTHONPATH environment variable? Did you "
                "forget to activate a virtual environment?"
            ) from exc
        execute_from_command_line(sys.argv)
    
    
    if __name__ == "__main__":
        main()
  • 3.从拉取的代码中找到Dockerfile文件

    dockerfile 复制代码
    FROM python:3.10-alpine
    MAINTAINER xiaopawnye
    ENV DJANGO_SETTINGS_MODULE=settings.local
    WORKDIR /data/recruitment
    COPY ./requirements.txt .
    COPY ./start.sh .
    COPY ./src .
    RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories # 替换为apk阿里云镜像
    RUN apk add --update --no-cache curl jq py3-configobj py3-pip py3-setuptools python3-dev \
      && apk add --no-cache gcc g++ jpeg-dev zlib-dev libc-dev libressl-dev musl-dev libffi-dev \
      && python -m pip install --upgrade pip \
      && pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple \
      && apk del gcc g++ libressl-dev musl-dev libffi-dev python3-dev \
      && apk del curl jq py3-configobj py3-pip py3-setuptools \
      && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
      && echo 'Asia/Shanghai' >/etc/timezone  \
      && rm -rf /var/cache/apk/*
    RUN sed -i 's/\r//' /data/recruitment/start.sh
    RUN chmod +x ./start.sh
    EXPOSE 39979
    CMD ["/bin/sh", "/data/recruitment/start.sh"]
  • 4.构建镜像,注意下面命令中recruitment/必须是Dockerfile文件的上级父目录

    bash 复制代码
    docker build --network=host -t xiaopawnye/recruitment-base:v1 recruitment/
  • 5.镜像构建完成后启动容器,命令如下

    bash 复制代码
    docker run --rm --network=host  -p 39979:39979 -v "$(pwd)":/data/recruitment  --env server_params="--settings=settings.local" xiaopawnye/recruitment-base:v1

3.问题与思考

  • 问题1:执行镜像构建命令时报错docker build -t xiaopawnye/recruitment-base:v1

    bash 复制代码
    报错ERROR: unable to select packages:
    
      curl (no such package):
    
        required by: world[curl]
    
      jq (no such package):
    
        required by: world[jq]
    
      py3-configobj (no such package):
    
        required by: world[py3-configobj]
    
      py3-pip (no such package):
    
        required by: world[py3-pip]
    
      py3-setuptools (no such package):
    
        required by: world[py3-setuptools]
    
      python3 (no such package):
    
        required by: world[python3]
    
      python3-dev (no such package):
    
        required by: world[python3-dev]

    解决方法:

    查询google,Dockerfile编译django时执行pip命令报错网络不通,通过将命令修改为docker build --network=host -t xiaopawnye/recruitment-base:v1即可

  • 问题2报错

    bash 复制代码
    WARNING: Running pip as the 'root' user can result in broken permissions and conflicting                                                                                        behaviour with the system package manager. It is recommended to use a virtual environment                                                                                        instead: https://pip.pypa.io/warnings/venv
    Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
    Obtaining recruitment from git+ssh://****@git.zhlh6.cn/lp1506947671/recruitment.git@e94b4                                                                                       93b7646b0b74843cea49cfd14fa66c574b4#egg=recruitment (from -r requirements.txt (line 75))
      Cloning ssh://****@git.zhlh6.cn/lp1506947671/recruitment.git (to revision e94b493b7646b                                                                                       0b74843cea49cfd14fa66c574b4) to ./src/recruitment
      ERROR: Error [Errno 2] No such file or directory: 'git' while executing command git ver                                                                                       sion
    ERROR: Cannot find command 'git' - do you have 'git' installed and in your PATH?
    The command '/bin/sh -c apk add --update --no-cache curl jq py3-configobj py3-pip py3-set                                                                                       uptools  python3-dev   && apk add --no-cache gcc g++ jpeg-dev zlib-dev libc-dev libressl-                                                                                       dev musl-dev libffi-dev   && python -m pip install --upgrade pip   && pip install -r requ                                                                                       irements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple  && apk del gcc g++ libressl-dev                                                                                        musl-dev libffi-dev python3-dev   && apk del curl jq py3-configobj py3-pip py3-setuptool                                                                                       s   && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime   && echo 'Asia/Shanghai'                                                                                        >/etc/timezone    && rm -rf /var/cache/apk/*' returned a non-zero code: 1

    解决方法: dockerfiles镜像加速配置:https://blog.csdn.net/gitblog_00337/article/details/153157195

  • 问题3:容器启动成功但是web无法访问,显示违反csrf,解决方法注释如下代码

    python 复制代码
    SESSION_COOKIE_SECURE = True
    CSRF_COOKIE_SECURE = True
相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
默_笙3 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
前端小万3 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
qq_426003963 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
三十而立洋3 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
长沙三为智能科技3 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
分布式存储与RustFS3 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储