You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bash脚本在Docker中无法将错误重定向至文件

解决Docker错误重定向为空的问题

我来帮你分析下问题所在,以及怎么修复:

首先,你的命令里错误重定向的位置放错了——2 >error被放在了-arg后面,这会让Shell把2当成传给hello-world容器程序的参数,而不是错误输出(stderr)的重定向标识。这就导致你想捕获的错误信息根本没进到error文件里,自然是空的。

另外,hello-world镜像的默认启动程序并不接受-arg这类额外参数,当你传递它不认识的参数时,错误信息是输出到容器的stderr的,但你的原命令只重定向了容器的stdout到error文件,stderr还是直接输出到主机的终端上了。

修正后的命令

把错误重定向的语法2>error放到整个Docker命令的末尾,这样Shell就能正确识别它是重定向操作了:

sudo docker run --name test5 -e MyVar="test" hello-world -arg 2>error

如果想同时把容器的标准输出(stdout)和错误输出(stderr)都写到同一个文件里,可以用&>语法:

sudo docker run --name test5 -e MyVar="test" hello-world -arg &>error

要是想分开保存stdout和stderr,就写成:

sudo docker run --name test5 -e MyVar="test" hello-world -arg >output.log 2>error.log

额外提示

因为你用了--name test5指定容器名称,第一次运行后容器会处于停止状态,下次再运行这个命令会报错说容器名称已存在。你可以先删除旧容器再重新运行:

sudo docker rm test5

现在再执行修正后的命令,error文件里就会有hello-world程序不识别-arg参数的错误信息啦。

内容的提问来源于stack exchange,提问作者lipo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 09:42:43