• 记使用docker部署项目出现问题


    我的docker-compose.yml内容如下:

    version: "3"
    services:
      mysql:
        image: mysql:latest # mysql:oracle
        restart: always
        container_name: mysql
        command: 
          - --lower_case_table_names=1
        ports:
          - 3306:3306
        volumes:
          - ./init.sql:/docker-entrypoint-initdb.d/setup.sql
        environment:
          - MYSQL_ROOT_PASSWORD=123456
        healthcheck:
          test: ["CMD", "mysqladmin" ,"ping", "-h", "mysql"]
          timeout: 5s
          retries: 20
    
      my_server:
        build: .
        restart: always
        depends_on:
          mysql:
            condition: service_healthy
        ports:
          - 9999:9999
        links:
          - mysql
        environment:
          - ADMIN_PASSWD=admin   # 这个会覆盖Dockerfile里面的内容
    
      
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    Dockerfile内容如下:

    
    FROM sanicframework/sanic:3.8-latest
    
    WORKDIR /sanic/my_server
    
    COPY . /sanic/my_server
    
    COPY . .
    
    RUN pip install -r requirements.txt
    
    EXPOSE 9999
    
    CMD ./start.sh
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    使用docker-compose.yml部署项目时候,提示RuntimeError:‘cryptography’ package isrequired for sha256_password or caching_sha2_password,出现的原因是mysql8.0+版本使用了新的密码校验插件,需要安装cryptography这个库,

    在.yml这里插入图片描述

    当你在requirement.txt加上cryptography==39.0.1后,重新运行docker compose up这条命令时候,又出现如下错误

    在这里插入图片描述

    也就是说,安装cryptography这个库的时候,下载依赖出现问题,解决这个问题就是安装一些必备的库,在Dockerfile文件添加以下内容

    RUN apk update
    
    RUN apk --update add gcc musl-dev libffi-dev openssl-dev 
    
    RUN apk add gcc musl-dev python3-dev libffi-dev openssl-dev cargo
    
    RUN pip install -r requirements.txt
    
    EXPOSE 9999
    
    RUN apk del --purge gcc musl-dev libffi-dev openssl-dev
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    就可以解决库安装问题,完整的dockerfile如下:

    
    FROM sanicframework/sanic:3.8-latest
    
    WORKDIR /sanic/my_server
    
    COPY . /sanic/my_server
    
    COPY . .
    
    RUN apk update
    
    RUN apk --update add gcc musl-dev libffi-dev openssl-dev 
    
    RUN apk add gcc musl-dev python3-dev libffi-dev openssl-dev cargo
    
    RUN pip install -r requirements.txt
    
    EXPOSE 9999
    
    RUN apk del --purge gcc musl-dev libffi-dev openssl-dev
    
    CMD ./start.sh $ADMIN_PASSWD
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    当你再次运行docker compose up时候,又出现问题,提示如下错误

     /bin/sh: ./start.sh: not found
    
    • 1

    刚开始我怀疑是没有将这个文件复制到容器里面,所以加了如下内容

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/6e29c466a8734e50ad81fd90b9190a2d.png在这里插入图片描述

    再次运行docker compose up,还是找不到not found start.sh

    最终没有运行start.sh文件,而是直接跑main.py,让容器先跑起来,再 exec 到 容器里 vi .start.sh,发现后面多了一个^M,也就是换行符引起的,最后在Dokcerfile引入如下内容完美解决

    RUN dos2unix ./start.sh
    
    • 1

    完整的Dockerfile如下:

    FROM sanicframework/sanic:3.8-latest
    
    WORKDIR /sanic/my_server
    
    COPY . /sanic/my_server
    
    COPY . .
    
    RUN apk update
    
    RUN apk --update add gcc musl-dev libffi-dev openssl-dev dos2unix
    #
    #  The Rust available by default in Alpine < 3.12 is older than the minimum supported version.
    #  https://cryptography.io/en/latest/installation.html
    # 
    RUN apk add gcc musl-dev python3-dev libffi-dev openssl-dev dos2unix
    
    RUN pip install -r requirements.txt
    
    EXPOSE 9999
    
    RUN apk del --purge gcc musl-dev libffi-dev openssl-dev dos2unix
    
    VOLUME ["/sanic/license/config", "/sanic/license/log"]
    
    CMD ./start.sh $ADMIN_PASSWD
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
  • 相关阅读:
    老项目导入异常问题解决:NDK问题
    用python使用pyautogui库实现按键精灵模拟鼠标键盘找图的功能
    C/C++数据结构——[NOIP2004]FBI树(二叉树)
    vivo 商品中台的可视化微前端实践
    记录Android 知乎图片选择器Matisse的注意事项
    Kali linux 下配置社会工程学工具包SET
    死磕面试八股文
    C/S架构学习之基于UDP的本地通信(客户机)
    HIVE如何校验map类型数据 -- 比较json和map的转换前后数据一致性
    MYSQL多表联查on和where的区别
  • 原文地址:https://blog.csdn.net/qq_41591215/article/details/133858978