-su:/ dev / tty:没有这样的设备或地址

时间:2017-12-08 11:38:09

标签: linux docker terminal debian tty

可以请别人向我解释为什么会这样?

# su - someone -s /bin/bash -c "ls -la /dev/tty"
crw-rw-rw- 1 nobody nogroup 5, 0 Dec  7 20:53 /dev/tty
# BUT:
# su - someone -s /bin/bash -c "echo hello > /dev/tty"
-su: /dev/tty: No such device or address

我正在构建一个内部有两个服务的docker Container。这些服务是Shell-Script的开始:

CMD ["./starter.sh"]

使用Dockerfile我已将日志重定向到/dev/stderr/dev/tty

# None of the following works:
RUN ln -sf /dev/tty /var/log/thelog.log
RUN ln -sf /dev/stdout /var/log/thelog.log
RUN ln -sf /dev/stderr /var/log/thelog.log

问题是我正在尝试运行其中一个服务而不是root(su - someone -c "service"),这会产生以下错误:

unable to open log file [/var/log/thelog.log]: [6] No such device or address

我怎么能解决这个问题?我希望将日志链接到/dev/*并希望以非root用户身份运行用户。此外,我尝试将用户添加到组tty,但没有成功。

感谢。

1 个答案:

答案 0 :(得分:3)

su 的联构帮助页指出执行的命令将没有控制终端。对/ dev / tty的任何写操作都将返回ENXIO错误:

$ errno ENXIO
ENXIO 6 No such device or address

sudo 会分配一个控制终端:

sudo -u someone /bin/bash -c "echo hello > /dev/tty"

如果您使用<<>您无需为/ dev / tty(/ dev / stdout和/ dev / stderr足够)创建符号链接或使用 sudo Dockerfile中的strong> USER 指令或supervisor