6

私は Docker のリモート API を使用してコンテナーを作成し、その中で Python プログラムを実行し、コンテナーにアタッチし、stdout に書き込まれた出力を Web にストリーミングしています。

ここで、Python プログラムが stdin からのユーザー入力を受け入れるようにしたいと考えました。例えば

import sys
name = sys.stdin.readline()
print "Your name is: " + name

API を介して Docker コンテナー内で実行されているこの Python プログラムにユーザー入力を渡すにはどうすればよいですか? docker コンテナー内で実行されているプロセスに「入力」を渡すことができる API エンドポイントが表示されません。

ありがとう。

4

4 に答える 4

6

実際、 を使用してコンテナの stdin をアタッチできますdocker attach。例:

「リスニング」コンテナーを開始します。

docker run -i -t ubuntu:precise /bin/bash -c 'read FOO; echo $FOO;'

次に、別の端末で:

# lookup container id
docker ps

# attach the container
docker attach 91495c6374b1

これで、リッスンしているコンテナーの stdin に接続され、入力できるようになり、すべてが機能するはずです。

リモートAPIを使用してそれを行うことに関しては...これは、/containers/{id}/attachエンドポイントを使用して可能でstdin=1あり、おそらくstream=1. それを機能させることができず、この背後にあるgoコードを理解するためにまだ取り組んでいますが、実装で見ることができることから、これは間違いなく可能であるはずです.

于 2013-11-19T09:23:22.397 に答える
2

質問は少し古いですが、あなたが探していたのは、リモート API からのアタッチ エントリ ポイントだったと思います。ここをチェックしてください:https://docs.docker.com/reference/api/docker_remote_api_v1.17/#attach-to-a-container

docker と対話するために処理するソケット ストリームを開きます。この代替手段で websocket を使用することも可能です: https://docs.docker.com/reference/api/docker_remote_api_v1.17/#attach-to-a-container-websocket

進め方を詳しく説明しているこの IRC チャットを見つけました: https://botbot.me/freenode/docker/2014-12-22/?msg=28120891&page=10

それが役に立てば幸い

于 2015-03-26T05:49:31.053 に答える
0

docker がこのような対話性をサポートしているとは思わないでください。ただし、いくつかの解決策があります

  1. bash でコンテナーを起動し、コンテナー内からコマンドを実行できます。

  2. または、Python プログラムを引数を待つデーモン サービスにすることもできます。subprocess.Popen http://docs.python.org/2/library/subprocess.html#subprocess.Popenを使用して、Python をプロセスとして開始します。この SO の質問running-an-interactive-command-from-within-python に注意してください

お役に立てれば。

于 2013-11-12T07:49:20.573 に答える
0

コンテナ内でsshdサーバーを実行するだけですか?http://docs.docker.io/en/latest/examples/running_ssh_service/

于 2013-11-19T07:53:42.703 に答える