docker 中的 wget 打印数千行来显示进度而不是单行进度条

s.k*_*s.k 9 wget docker

当我wget从 GitHub 获取文件时,它会显示一个漂亮的单行进度条,如下所示:

wget -N http://db.sqlite.zip
db.sqlite.zip   28%[====>                       ]  68.79M   370KB/s    eta 5m 53s 
Run Code Online (Sandbox Code Playgroud)

但是,如果我 在启动容器时以完全相同的方式wget运行命令,作为 bash 脚本来获取一些数据,它会打印数千行,显然对于下载的每 50K 位:

app_1  |      0K .......... .......... .......... ..........  0%  212K 19m12s
app_1  |     50K .......... .......... .......... ..........  0%  426K 14m22s
app_1  |    100K .......... .......... .......... ..........  0% 38.4M 9m37s
app_1  |    150K .......... .......... .......... ..........  0%  430K 9m35s
app_1  |    200K .......... .......... .......... ..........  0% 33.9M 7m41s
...
Run Code Online (Sandbox Code Playgroud)

+很多...很多这样的行(它实际上填充了标准输出缓冲区,但我不想)。

我怎样才能获得与主机上相同的行为,例如显示一行进度条?当然如果可以的话。否则我就简单地-q结束了。

Ent*_*nte 7

在构建期间,docker 不会分配 tty。这将wget退回到dot进度条的显示方法。

遗憾的是,您的问题没有直接的解决方案。以下是一些建议:

  • 强制bar方法:
wget \
  --no-verbose --show-progress \
  --progress=bar:force:noscroll \
  url
Run Code Online (Sandbox Code Playgroud)

注意:这很可能仍然会产生相当多的输出行。

  • 减少方法dot打印行的频率:
wget \
  --no-verbose --show-progress \
  --progress=dot:mega \
  url
Run Code Online (Sandbox Code Playgroud)
  • 编写一些自定义脚本,将输出转换wget为您想要的内容。