launch_container.sh 2.79 KB
Newer Older
wangkx1's avatar
wangkx1 committed
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#/bin/bash

# set -x
# 脚本作用: 、
# 1. bash launch.sh 直接进入容器
# 2. bash launch.sh d / bash launch.sh destroy 删除容器
# 3. bash launch.sh p / bash launch.sh print 打印容器名称



docker_image=dcu_ai:v1.1
export CONTAINER_NAME="yolov5_test_dtk24.04.1"

command="docker run -id \
    --name ${CONTAINER_NAME} \
    --shm-size=32G \
    --ipc=host \
    --group-add video \
    --cap-add=SYS_PTRACE \
    --security-opt seccomp=unconfined \
    --network=host \
    --privileged \
    -e https_proxy=http://10.17.26.123:8086 \
    -e http_proxy=http://10.17.26.123:8086 \
    --device=/dev/kfd \
    --device=/dev/mkfd \
    --device=/dev/dri \
    -v /opt/hyhal:/opt/hyhal \
    -v /home/wkx/yolov5/datasets:/datasets \
    ${docker_image} \
    /bin/bash"


# 检查 CONTAINER_NAME 环境变量是否设置
if [ -z "${CONTAINER_NAME}" ]; then
    echo "环境变量 CONTAINER_NAME 未设置,请设置后再试。"
    exit 1
fi


check_command_result() {
    # 获取传递给函数的退出状态
    local exit_status=$1
    
    # 根据退出状态采取行动
    if [ "$exit_status" -eq 0 ]; then
        echo "命令成功执行"
    else
        echo "命令执行失败,退出状态为: $exit_status"
        exit $exit_status
    fi
}


# 使用 docker ps -a | grep 来查找容器,并计算结果行数
num=$(docker ps -a | grep "$CONTAINER_NAME" | wc -l)

# 检查容器是否存在
if [ "$num" -gt 0 ]; then
    echo "Container:[${CONTAINER_NAME}] already exists"

    #! 功能: 检测是否输入参数,而且参数是否符合类型,进行停止删除操作
    # 检查是否有参数传入
    if [ "$#" -gt 0 ]; then
        # 获取第一个参数
        param="$1"
        if [ "$param" = "d" ] || [ "$param" = "destroy" ]; then
            # echo "参数是 d 或者 destroy"
            docker stop ${CONTAINER_NAME}
            docker rm -f ${CONTAINER_NAME}
            echo "container:[${CONTAINER_NAME}] finish destroy."
        fi

        if [ "$param" = "p" ] || [ "$param" = "print" ]; then
            # echo "参数是 d 或者 destroy"
            echo "container:[${CONTAINER_NAME}]."
            exit
        fi
    else  #! 如果没参数传入, 则直接进入容器
        docker start $CONTAINER_NAME        
        docker exec -ti --env COLUMNS=`tput cols` --env LINES=`tput lines` $CONTAINER_NAME /bin/bash
        exit
    fi 
    #!

else
    echo "Container:[${CONTAINER_NAME}] does not exist, will be created and go inside it."

    eval ${command}

    check_command_result $?
    echo "Container:[${CONTAINER_NAME}] Created successfully!"

    docker start $CONTAINER_NAME
    exit_status=$?


    echo "Container:[${CONTAINER_NAME}] Started successfully!"
    docker exec -ti --env COLUMNS=`tput cols` --env LINES=`tput lines` $CONTAINER_NAME /bin/bash
    exit
fi