如何在无默认启动进程的Docker容器中执行命令
解决Docker无默认启动命令的无人值守执行方案
方法一:创建容器时指定挂起命令,完成操作后清理
适合需要先传输文件再执行命令的场景:
- 创建容器时指定让容器保持运行的命令:
docker create --name temp_container [容器镜像标签] tail -f /dev/null - 启动容器:
docker start temp_container - 传输文件到容器内:
docker cp 本地文件路径 temp_container:/容器内目标路径/ - 在运行中的容器里执行目标命令:
docker exec temp_container /容器内目标命令路径 - 任务完成后停止并删除容器:
docker stop temp_container && docker rm temp_container
方法二:挂载卷+一次性容器(推荐)
如果可以通过挂载本地目录替代docker cp传输文件,这个方案更简洁,全程无人值守:
docker run --rm -v /本地文件所在目录:/容器内对应目录 [容器镜像标签] /容器内目标命令路径
--rm:容器执行完命令后自动删除,避免残留无用容器-v:将本地目录挂载到容器内,无需单独执行文件传输操作- 命令以非交互模式运行,执行完目标命令后自动退出,完全适配服务器无人值守场景
原流程失效原因
容器启动后如果没有持续运行的进程,会立即退出;而docker exec仅能对运行中的容器执行命令,所以必须先让容器保持运行状态,才能进行后续操作。
内容的提问来源于stack exchange,提问作者Invizio
相关产品推荐
相关产品推荐

