如何在本地非容器环境运行容器内的run_test.sh脚本(WSL Ubuntu)
实现方案
1. 确认容器基础信息
先明确你的容器镜像名称(比如test-image)、容器内run_test.sh的绝对路径(比如/app/run_test.sh),以及脚本运行需要挂载的本地资源(比如测试数据目录)。
2. 在WSL Ubuntu中创建本地包装脚本
在WSL的可执行路径下(比如~/bin,没有的话先执行mkdir -p ~/bin,再把路径加入环境变量:echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc),创建名为run_test.sh的脚本:
#!/bin/bash # 替换成你的容器参数 IMAGE_NAME="你的容器镜像名" SCRIPT_IN_CONTAINER="/app/run_test.sh" # 本地测试数据目录,不需要挂载可删除这两行 LOCAL_DATA="$HOME/test-data" CONTAINER_DATA="/data" # 启动容器并执行脚本,自动传递本地调用时的参数 docker run --rm -v "$LOCAL_DATA":"$CONTAINER_DATA" "$IMAGE_NAME" bash -c "$SCRIPT_IN_CONTAINER $@"
关键参数说明:
--rm:脚本执行完自动销毁容器,避免残留无用容器-v:挂载本地目录到容器,保证脚本能访问所需资源(无挂载需求可删除此部分)$@:将本地调用时传入的参数原样传递给容器内的脚本
3. 给脚本添加执行权限
执行命令:
chmod +x ~/bin/run_test.sh
4. 测试运行
在WSL非容器环境直接调用:
run_test.sh [你的脚本参数]
系统会自动启动对应容器,在容器内执行目标脚本,并将输出返回本地终端。
补充:复用容器的优化方案
如果需要重复使用同一个容器(减少启动开销),可以修改包装脚本为:
#!/bin/bash CONTAINER_NAME="test-container" IMAGE_NAME="你的容器镜像名" SCRIPT_IN_CONTAINER="/app/run_test.sh" LOCAL_DATA="$HOME/test-data" CONTAINER_DATA="/data" # 检查容器是否存在,不存在则创建后台运行的容器 if ! docker inspect "$CONTAINER_NAME" &> /dev/null; then docker run -d -v "$LOCAL_DATA":"$CONTAINER_DATA" --name "$CONTAINER_NAME" "$IMAGE_NAME" tail -f /dev/null fi # 在运行的容器内执行脚本 docker exec -i "$CONTAINER_NAME" bash -c "$SCRIPT_IN_CONTAINER $@"
内容的提问来源于stack exchange,提问作者visiwat303
相关产品推荐
相关产品推荐

