【问题标题】:"docker run -dti" with a dumb terminal带有哑终端的“docker run -dti”
【发布时间】:2016-02-29 00:54:58
【问题描述】:

更新:添加了缺少的 docker attach。

您好,我正在尝试使用 -dti 运行 docker 容器。但我无法使用设置为哑的终端访问。有没有办法改变它(它目前设置为 xterm,即使我的 ssh 客户端很笨)

示例:

创建容器

docker run -dti --name test -v /my-folder alpine /bin/ash
docker attach test
apk --update add nodejs
cd /my-folder
npm install -g gulp

最后一个命令总是包含用于移动光标的 ascii 转义字符。

我已经在运行的容器中尝试了“export TERM=dumb”,但它不起作用。

有没有办法使用哑终端“运行”它?

我正在通过(哑)ssh 从另一台计算机上的脚本运行它。

【问题讨论】:

  • 你能同时做-d-i吗?这些不矛盾吗?
  • 不,我将容器作为恶魔启动,并且可以在需要时附加到它

标签: ssh terminal docker


【解决方案1】:

使用 -t 设置此 https://docs.docker.com/engine/reference/run/#env-environment-variables,但会删除命令提示符的影响(提示符未显示)

可能的解决方案 1 删除 -t 并保留 -i。查看命令是否已完成回显已知标记 (ENDENDEND)。即

docker run -di --name test -v /my-folder alpine /bin/ash
docker attach test
apk --update add nodejs;echo ENDENDEND
cd /my-folder;echo ENDENDEND
npm install -g gulp;echo ENDENDEND

不漂亮,但它有效(结果中没有 ascii)

可能的解决方案2使用日志,docker可以注销linux日志,这可以在容器中执行命令时收集。 (我还没有完全测试这个。但是日志似乎是发生了什么更好的输出)

【讨论】:

    【解决方案2】:

    更新: 是的 -t 是问题所在。 但是,如果您想在运行命令时查看整个过程,也许这种方式会更好:

    docker run -di --name test -v/my-folder alpine /bin/ash
    docker exec -it test /bin/ash
    

    最后你需要在所有作业完成后杀死容器。


    docker run -d 表示“在后台运行容器并打印容器 ID” 不将容器作为守护进程启动

    【讨论】:

    • 我错过了 docker attach,我知道它在后台运行。 -d 不是问题,我相信它是 -t
    猜你喜欢
    • 2017-02-17
    • 2023-04-05
    • 1970-01-01
    • 2017-01-16
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2021-10-09
    相关资源
    最近更新 更多