6

我一直在使用 Docker 的远程 API 创建一个容器,在其中运行一个 Python 程序,附加到容器并将写入到标准输出的输出流式传输到网络。

现在,我希望我的 Python 程序接受来自标准输入的用户输入。例如

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

如何通过 API 将用户输入传递给在 Docker 容器内运行的 Python 程序?我没有看到任何 API 端点可以让我将“输入”传递给在 docker 容器内运行的进程。

谢谢。

4

4 回答 4

6

实际上,您可以使用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

您现在已连接到侦听容器的标准输入,并且可以输入 thing 并且一切正常。

至于使用远程 API 来做到这一点......我认为这可以使用带有和可能的/containers/{id}/attach端点。无法让它工作,并且仍在努力理解这背后的 go 代码,但从我在实现中看到的情况来看,这绝对是可能的。stdin=1stream=1

于 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 回答