DockerのCentOSでPythonコードを使用してsudoコマンドを実行する方法

DockerのCentOSでPythonコードを使用してsudoコマンドを実行する方法

次のように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つです。

私は次のリンクをたどっています。

https://stackoverflow.com/questions/37439887/how-to-access-the-metadata-of-a-docker-container-from-a-script-running-inside-th

唯一の問題は、端末ではなくPythonでこれを実行したいということです。また、参考までに端末で同じコマンドを実行すると応答を受けます。

Dockerfileに以下を追加してみました。

RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

ありがとう

答え1

sudoデフォルト設定は、requiretty標準入力ではなく実際のミートバックに対してパスワード認証ができるだけ確実に提供されるように設定されています。NOPASSWD特定の項目に設定されていてもsudoers確認されます。

まず、これを行う必要がある理由を詳しく調べることをお勧めしますsudo curl。通常、これは非常に賢明ではありません。curlリモートホストから何かを取得するために実行するために「root」である必要はありません。curl権限のないユーザーとして実行してください。取得したすべてのタスクを実行するためにスーパーユーザーアクセスが必要な場合は、別途実行してください。

あまりにも多くのことを言ってrequretty、特定の項目または構成全体を無効にすることができ、sudoersTTYはもはや必要ありません。

関連情報