我正在尝试从 Python 访问 docker 图像标签,如下所示
hostname = socket.gethostname()
cmd = "sudo curl --unix-socket /var/run/docker.sock http:/containers/" + hostname + "/json"
output = os.popen(cmd).read()
但是,问题是我收到以下错误:
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
sudo: no tty present and no askpass program specified
这是我从 StackOverflow 上读到的其他一些帖子中 Unix 发出的奇特消息之一。
我正在关注以下链接
唯一的问题是我想从 Python 而不是从终端运行这些东西。另外,仅供参考,当我从终端运行相同的命令时,我得到了响应。
我尝试在 Dockerfile 中附加以下内容
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
谢谢
答案1
sudo
默认情况下的配置已requiretty
设置,以便尽可能可靠地将密码身份验证呈现给实际的肉袋而不是标准输入。即使NOPASSWD
为特定sudoers
条目设置了此项,也会进行检查。
首先,我建议您仔细研究一下为什么需要这样做sudo curl
。作为一般规则,这是非常不明智的——您不需要成为“root”来运行curl
以从远程主机提取某些内容。curl
以非特权用户身份运行,如果您需要超级用户访问权限来对您获取的任何内容执行某些操作,请单独执行此操作。
说了这么多,您可以禁用requretty
特定sudoers
条目或整个配置,并且不再需要 TTY。