次のように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がエクスポートする奇妙なメッセージの1つです。
私は次のリンクをたどっています。
唯一の問題は、端末ではなくPythonでこれを実行したいということです。また、参考までに端末で同じコマンドを実行すると応答を受けます。
Dockerfileに以下を追加してみました。
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
ありがとう
答え1
sudo
デフォルト設定は、requiretty
標準入力ではなく実際のミートバックに対してパスワード認証ができるだけ確実に提供されるように設定されています。NOPASSWD
特定の項目に設定されていてもsudoers
確認されます。
まず、これを行う必要がある理由を詳しく調べることをお勧めしますsudo curl
。通常、これは非常に賢明ではありません。curl
リモートホストから何かを取得するために実行するために「root」である必要はありません。curl
権限のないユーザーとして実行してください。取得したすべてのタスクを実行するためにスーパーユーザーアクセスが必要な場合は、別途実行してください。
あまりにも多くのことを言ってrequretty
、特定の項目または構成全体を無効にすることができ、sudoers
TTYはもはや必要ありません。