"git@developer.sourcefind.cn:yangql/googletest.git" did not exist on "c26f969579d62444ae7d422b37e0037ceca97a7a"
Commit aa8955ca authored by wangkx1's avatar wangkx1
Browse files

Update launch_container.sh

parent 53f622b5
#/bin/bash
#!/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 打印容器名称
# 4. bash launch.sh -v 启动容器并显示连接命令
# ==================== 配置区域 ====================
# 镜像配置
docker_image="dcu_ai:v1.1"
container_name="yolov5_test_dtk24.04.1"
# 挂载卷配置 (格式: "宿主机路径:容器路径")
# 可以添加多个挂载,用空格分隔
mounts=(
"/opt/hyhal:/opt/hyhal"
"/home/wkx/yolov5/datasets:/datasets"
)
# 环境变量配置
environment_vars=(
"https_proxy=http://10.17.26.123:8086"
"http_proxy=http://10.17.26.123:8086"
)
# Docker 设备配置
devices=(
"/dev/kfd"
"/dev/mkfd"
"/dev/dri"
)
# Docker 运行参数
shm_size="32G"
extra_args=(
"--ipc=host"
"--group-add video"
"--cap-add=SYS_PTRACE"
"--security-opt seccomp=unconfined"
"--network=host"
"--privileged"
)
# ==================== 配置区域结束 ====================
export CONTAINER_NAME="${container_name}"
# 构建 docker run 命令
build_docker_command() {
local cmd="docker run -id --name ${CONTAINER_NAME} --shm-size=${shm_size}"
# 添加额外参数
for arg in "${extra_args[@]}"; do
cmd="${cmd} ${arg}"
done
# 添加环境变量
for env in "${environment_vars[@]}"; do
cmd="${cmd} -e ${env}"
done
# 添加设备
for device in "${devices[@]}"; do
cmd="${cmd} --device=${device}"
done
# 添加挂载卷
for mount in "${mounts[@]}"; do
cmd="${cmd} -v ${mount}"
done
cmd="${cmd} ${docker_image} /bin/bash"
echo "${cmd}"
}
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"
command=$(build_docker_command)
# 检查 CONTAINER_NAME 环境变量是否设置
if [ -z "${CONTAINER_NAME}" ]; then
......@@ -37,12 +83,9 @@ if [ -z "${CONTAINER_NAME}" ]; then
exit 1
fi
check_command_result() {
# 获取传递给函数的退出状态
local exit_status=$1
# 根据退出状态采取行动
if [ "$exit_status" -eq 0 ]; then
echo "命令成功执行"
else
......@@ -51,51 +94,97 @@ check_command_result() {
fi
}
# 显示容器连接信息
show_container_info() {
echo ""
echo "========================================="
echo "容器名称: ${CONTAINER_NAME}"
echo "连接命令:"
echo "docker exec -it ${CONTAINER_NAME} /bin/bash"
echo "========================================="
echo ""
}
# 使用 docker ps -a | grep 来查找容器,并计算结果行数
num=$(docker ps -a | grep "$CONTAINER_NAME" | wc -l)
# 检查是否有 -v 参数
show_connect_cmd=false
if [ "$#" -gt 0 ]; then
for arg in "$@"; do
if [ "$arg" = "-v" ]; then
show_connect_cmd=true
# 移除 -v 参数,避免干扰其他逻辑
set -- "${@/$arg/}"
# 重新构建参数列表,去除空参数
args=()
for a in "$@"; do
[ -n "$a" ] && args+=("$a")
done
set -- "${args[@]}"
break
fi
done
fi
# 检查容器是否存在
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."
exit
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
fi
# 如果是 -v 模式,显示信息后退出
if [ "$show_connect_cmd" = true ]; then
# 确保容器在运行状态
container_status=$(docker inspect -f '{{.State.Status}}' ${CONTAINER_NAME} 2>/dev/null)
if [ "$container_status" != "running" ]; then
echo "Starting container..."
docker start ${CONTAINER_NAME}
check_command_result $?
echo "Container:[${CONTAINER_NAME}] Started successfully!"
fi
show_container_info
exit
fi
#!
# 默认行为:进入容器
docker start ${CONTAINER_NAME}
docker exec -ti --env COLUMNS=`tput cols` --env LINES=`tput lines` ${CONTAINER_NAME} /bin/bash
exit
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
docker start ${CONTAINER_NAME}
exit_status=$?
check_command_result $exit_status
echo "Container:[${CONTAINER_NAME}] Started successfully!"
docker exec -ti --env COLUMNS=`tput cols` --env LINES=`tput lines` $CONTAINER_NAME /bin/bash
# 如果是 -v 模式,显示信息后退出
if [ "$show_connect_cmd" = true ]; then
show_container_info
exit
fi
docker exec -ti --env COLUMNS=`tput cols` --env LINES=`tput lines` ${CONTAINER_NAME} /bin/bash
exit
fi
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment