好吧,从昨晚开始,这件事至少让我忙了一天。我试图做一些非常简单的事情:运行一个 bash 脚本,它会创建几个文件夹并运行一个docker
容器 - 但是使用upstart
.但我收到权限错误:
- 要么权限错误,要么创建文件夹,具体取决于它定义为哪个用户
setuid
- 无论如何,我得到了错误
cannot enable tty mode on non tty input
我尝试过使用setuid
with uservuvu
或直接将其省略,但都无济于事。如果我不使用,setuid
我会得到cannot enable tty mode on non tty input
;如果我使用我已设置为管理员的用户,我会得到该错误以及cannot create directory 'log/1438359854': Permission denied
。
这是我的visudo
输出:
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# User privilege specification
root ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) NOPASSWD:ALL
%adm ALL=(ALL) NOPASSWD:ALL
vuvu ALL=(ALL:ALL) NOPASSWD:ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
并且我已将用户vuvu
作为的一部分admin
,但当它不能作为的一部分工作时adm
。
我的 upstart 很简单:
description "Job docker_some_api.conf created by create_init.py"
author "create_init.py"
start on runlevel [2345]
stop on runlevel [!2345]
setuid vuvu
chdir /home/myuser/Docker/docker_some_api/
script
exec /home/myuser/Docker/docker_some_api/run.sh
end script
而且 shell 脚本很简单(我已经简化为只运行 ubuntu):
sudo docker run -t -i ubuntu
似乎什么都没起作用,现在我真的很沮丧。你们能帮忙吗?
答案1
找到了!!
问题在于指定-t
哪个永远无法工作,因为它分配了一个伪 TTY。systemd 的一个类似问题是已报告但这个是针对新贵的。
所以我所要做的就是改变这一点:
sudo docker run -i ubuntu
现在看起来很简单,永远不要只是复制选项而没有意识到它们的作用。