【问题标题】:Docker-Python script input errorDocker-Python 脚本输入错误
【发布时间】:2018-02-11 13:18:04
【问题描述】:

我是 Docker 新手。我有一个名为 ApiClient.py 的脚本。 ApiClient.py 脚本要求用户输入一些数据,例如用户的电子邮件、密码、输入文件(脚本将在其中获取一些输入信息)和输出文件(将输出结果)。我使用过这个 Dockerfile :

FROM python:3
WORKDIR /Users/username/Desktop/Dockerfiles
ADD . /Users/username/Desktop/Dockerfiles
RUN pip install --trusted-host pypi.python.org -r requirements.txt
EXPOSE 80
ENV NAME var_name
CMD ["python", "ApiClient.py"]

第一个问题:我使用了这个 WORKDIR 和 ADD,因为那是输入和输出文件存在的地方。声明这些目录是错误的吗?

2n 问题:脚本要求用户输入一些信息,例如电子邮件和密码。但是当我运行时:

docker run -p 4000:80 newapp

我收到以下错误: username = ("请输入您的用户名")

EOFError:EOF 读取一行时

为什么会出现这个错误?

【问题讨论】:

    标签: python docker input eof


    【解决方案1】:

    使用docker run -i -t <your-options>

    所以这里,-i 代表交互模式,-t 会为我们分配一个伪终端。

    在你的场景中是

    docker run -p 4000:80 -it newapp
    

    希望对你有帮助!

    【讨论】:

    • 谢谢,我用过: docker run -ti newapp 并且成功了。问题是我无法定义输入和输出文件......
    • 我明白了.. 你是否仍然遇到同样的错误。您无法以交互方式使用 username=?
    • 不,我不是错误。当我输入我的电子邮件和用户名时,一切正常。问题是我不知道如何将输入文件作为容器的参数传递以及输出文件将在哪里传递被创造
    • @KonKyri,为什么不将文件路径作为参数传递?
    • @aerokite 这就是我要做的。你能给我举个例子吗?输入和输出。
    【解决方案2】:

    让我们做一些必要的文件作为例子

    Dockerfile

    FROM python
    ADD . /python
    WORKDIR /python
    
    ENTRYPOINT ["python", "main.py"]
    

    您想要运行一个脚本,该脚本将接受两个参数作为输入和输出文件

    ma​​in.py

    import sys
    input_file = sys.argv[1]
    output_file = sys.argv[2]
    file = open(input_file, 'r') 
    print(file.read())
    
    file = open(output_file, 'w') 
    
    file.write('Hello World')
    

    现在构建并运行

    $ docker build  -t test  .
    $ docker run -it -v /tmp/python/:/python/data test data.txt data/output.txt
    

    您的 main.py 将从 /python/data.txt 获取输入并将输出写入 /python/data/output.txt

    由于/python/data 被挂载到/tmp/python/,您将在本地的/tmp/python/ 中获得output.txt

    【讨论】:

    • 感谢您的帮助。我的文件仍然存在问题。我的桌面上有一个名为 newappfiles 的文件夹,其中包含:Dockerfile、requirements.txt 和 main.py。我在 newappfiles 文件夹中使用您提到的命令。我应该将 data.txt(input) 和 output.txt(output) 文件放在哪里?在 newappfiles 或其他地方?然后使用命令时:$ docker run -it -v /tmp/python/:/python/data test data.txt data/output.txt 我应该提供每个文件的完整路径吗?
    • 我无法理解我的输入、输出文件将在哪里。执行后,output.txt 会在容器中吗?如果是,我将如何访问它?如果不是,它将在哪里在我的电脑里吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2017-07-04
    • 1970-01-01
    • 2012-01-31
    相关资源
    最近更新 更多