docker 运行 输出出现乱序
docker run output appears out of order
我直接举个例子:
docker run --rm -i alpine /bin/sh -vs <<EOF
echo BEFORE
cat /etc/*elease
echo AFTER
EOF
输出:
echo BEFORE
cat /etc/*elease
echo AFTER
BEFORE
3.9.3
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.9.3
PRETTY_NAME="Alpine Linux v3.9"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
AFTER
请注意,由 sh -v
打印的命令本身(如 echo BEFORE
)出现在任何命令输出(如 BEFORE
)之前。
我希望看到
echo BEFORE
BEFORE
cat /etc/*elease
3.9.3
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.9.3
PRETTY_NAME="Alpine Linux v3.9"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
echo AFTER
AFTER
我尝试使用 stdbuf
和 script
作为示例描述 here,但无济于事。
我不认为我是唯一遇到此问题的人。所以我想
- 输出如此混乱的原因是什么?
- 有办法解决吗?
我能够通过将 stdout 重定向到 stderr 来解决这个问题:
docker run --rm -i alpine /bin/sh -vs <<EOF
exec 1>&2
echo BEFORE
cat /etc/*elease
echo AFTER
EOF
我直接举个例子:
docker run --rm -i alpine /bin/sh -vs <<EOF
echo BEFORE
cat /etc/*elease
echo AFTER
EOF
输出:
echo BEFORE
cat /etc/*elease
echo AFTER
BEFORE
3.9.3
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.9.3
PRETTY_NAME="Alpine Linux v3.9"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
AFTER
请注意,由 sh -v
打印的命令本身(如 echo BEFORE
)出现在任何命令输出(如 BEFORE
)之前。
我希望看到
echo BEFORE
BEFORE
cat /etc/*elease
3.9.3
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.9.3
PRETTY_NAME="Alpine Linux v3.9"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
echo AFTER
AFTER
我尝试使用 stdbuf
和 script
作为示例描述 here,但无济于事。
我不认为我是唯一遇到此问题的人。所以我想
- 输出如此混乱的原因是什么?
- 有办法解决吗?
我能够通过将 stdout 重定向到 stderr 来解决这个问题:
docker run --rm -i alpine /bin/sh -vs <<EOF
exec 1>&2
echo BEFORE
cat /etc/*elease
echo AFTER
EOF