Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker python脚本不支持';执行不当_Python_Docker_Dockerfile - Fatal编程技术网

docker python脚本不支持';执行不当

docker python脚本不支持';执行不当,python,docker,dockerfile,Python,Docker,Dockerfile,当我运行我的容器时,我试图从根目录(“/”)运行带有“/usr/bin/python”的“docker.py”。我已经检查了源映像以确保python二进制文件存在,我已经将docker.py上传到docker映像并使用该二进制文件成功运行它。但是,当我尝试创建映像然后运行映像时,会出现此错误(“EOFError:EOF when reading a line”),我不知道这意味着什么,也不知道从哪里开始。感谢您的帮助。提前谢谢 cat docker.py #!/usr/bin/python my

当我运行我的容器时,我试图从根目录(“/”)运行带有“/usr/bin/python”的“docker.py”。我已经检查了源映像以确保python二进制文件存在,我已经将docker.py上传到docker映像并使用该二进制文件成功运行它。但是,当我尝试创建映像然后运行映像时,会出现此错误(“EOFError:EOF when reading a line”),我不知道这意味着什么,也不知道从哪里开始。感谢您的帮助。提前谢谢

cat docker.py

#!/usr/bin/python
my_name = raw_input("Enter your name: ")
print my_name
quit()
cat Dockerfile

FROM python:2.7
ADD docker.py /docker.py
CMD ["/usr/bin/python", "/docker.py"]
docker build.

Sending build context to Docker daemon  175.8MB
Step 1/3 : FROM python:2.7
 ---> b1d5c2d7dda8
Step 2/3 : ADD docker.py /docker.py
 ---> f55a19158773
Step 3/3 : CMD ["/usr/bin/python", "/docker.py"]
 ---> Running in b830da5a2f5b
 ---> ef5b878d203f
Removing intermediate container b830da5a2f5b
Successfully built ef5b878d203f
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
docker run ef5b878d203f

Enter your name: Traceback (most recent call last):
  File "/docker.py", line 2, in <module>
    my_name = raw_input("Enter your name: ")
EOFError: EOF when reading a line
输入您的姓名:回溯(最近一次通话):
文件“/docker.py”,第2行,在
我的名字=原始输入(“输入你的名字:”)
EOF:读取一行时的EOF

问题在于docker.py脚本需要输入。正如@klausd.所评论的,对于raw_输入命令,您需要在一个交互式shell中。当您在docker容器中运行时,没有交互式shell,因此当您运行raw_input时,它只会意外地终止该命令,因此会收到错误

一旦您启动了容器,从用户的角度来看,它就像一个小型虚拟机,您可以与它进行的唯一交互是通过您在容器本身中设置的方法。或使用以下方法进入容器:

docker exec -it CONTAINER_HASH /bin/bash
从那里你有了一个交互式shell,如果你像那样登录,那么你可以运行它

python /docker.py

如果你想在容器中使用终端,请使用
docker run
-ti
参数。谢谢,这很有效。现在,有没有一种方法可以将容器中的终端连接到网络套接字,以便远程机器可以连接到我在容器中运行的python脚本,并通过网络“交互”使用它?一个问题,一个问题。谢谢KlausD和Jeff,我明白了。我试图通过网络端口公开我的容器。即使“docker ps-a”表示容器正在运行并且请求的端口已公开,我也无法“telnet IP port”连接到它。如果我使用“nc IP端口”,我会得到一个连接,但我的脚本不会主动提示我,我必须输入一些数据以获取任何信息,然后是一个断管,而不是脚本中要求的其余操作。我还尝试了一个行为非常相似的xinetd服务。我知道1个问题1的答案,只是在寻找方向。Hi Dan,这里的问题可能是您的容器需要一个服务来监听您已公开的端口,因此要遵循您所在的路径,您需要容器运行一个服务来监听您的请求,然后将请求交给脚本并返回响应。所以这个港口不足以满足你的期望。这个问题很好地为我们提供了一个问题的最小示例,但我怀疑您的项目比这个示例更大,为了给您提供关于下一步的建议,我需要一个最终目标的描述,这是有意义的,所以让我们从等式()中删除容器。仅Xinetd就足以满足我的需求。我希望通过网络公开程序的原因是避免通过交互式shell公开代码本身。在容器中打包代码、公开一个端口以及在该端口后面的容器中构建xinetd服务与我提供的链接大致相同,可能只是增加了可伸缩性。套接字激活可能很有趣,用户持久化到容器也是如此。我还问了你的另一个问题,看起来你非常接近你想要的,不幸的是,我确实注意到了问题所在。也许这与服务设置有关?对不起,我帮不上忙了!没问题,杰夫。我今天做了更多的测试,你能看看我在这篇文章上留下的最后一条评论,让我知道你的意见吗?我希望在这之后不要打扰你。非常感谢你的意见。