python - 文件作为Docker Python应用程序的命令行参数

标签 python docker

我需要创建将从命令行读取文件的dockerized python应用程序。

我不知道是否可能,但是我运行该应用程序的规范是:

docker run -t myimage file.csv

目前,我的docker文件如下所示:
FROM python:3
ADD test.py /
ENTRYPOINT ["python", "test.py"]
CMD ["test.py"]

其中test.py是:
导入系统
def main(args):
    for a in args:
        print(a)
        with open(a, 'r') as f:
            for l in f:
                print(l)


if __name__ == '__main__':
    main(sys.argv)

最佳答案

除非您将其作为卷映射到容器中,否则docker容器将看不到该文件。该语法如下所示:

docker run -t -v `pwd`/file.csv:/file.csv myimage file.csv

这样会将./file.csv映射为/file.csv到容器中,然后容器中的脚本将运行:
python test.py file.csv

您也可以使用docker cli将输入通过管道传递到容器中,以替换stdin。在CLI中,您需要包括-i以使其具有交互性,然后使用常规的shell重定向,例如:
docker run -it myimage <file.csv

如果这样做,则需要更新python脚本以从stdin读取而不是从文件读取,并且如果您将stdin用于其他用途,则无法选择与python脚本交互。

关于python - 文件作为Docker Python应用程序的命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42090663/

相关文章:

python - Pandas :对同一列中的情侣进行分组

python - 类型错误 : 'Node' Object is not iterable

amazon-web-services - 带有Docker的AWS EC2实例角色

docker - 没有提供-i的docker -t选项有没有用例?

python - 将字符串添加到整数的 x 轴

python - 如何扩展这个搜索和替换 python 脚本以接受来自命令行的变量?

Python同步urllib2结果

node.js - docker compose 与 docker run - Node 容器

docker - 为什么我的 Docker swarm 服务仅复制到 3/5?

python - FastAPI 应用程序在本地运行但不在 Docker 容器中