python - 无法解决以10为底的int()的基本错误无效文字

标签 python python-3.x docker

我正在尝试自动化构建docker镜像的过程。我有以下docker image传递命令行参数,在python脚本中检索参数。
自动化

#!/bin/bash
docker build -t test . --build-arg split=$split
docker run --rm -it test
Docker文件
FROM tensorflow/tensorflow:latst-py3
RUN mkdir -p /test/src
ARG split
WORKdir  /test/src
COPY . ./
CMD["python", "script.py","$split"]
python脚本
m1=testing(int(sys.argv[1])
运行bash脚本
bash ./automate.sh 5
在运行上面的代码时,我正在检索以下错误
ValueErro: invalid literal for int() with base 10; 'split'
非常感谢您的帮助。谢谢

最佳答案

$ split在automate.sh文件中为空。
如果您想在automate.sh内部传递值5,则可以将其作为bash脚本的第一个参数,因此您可以将其值设为$ 1
总之,如果执行:

bash ./automate.sh 5
那么$ 0是脚本中的./automate.sh,而$ 1是5。这称为位置参数。如果实际上您确实想从$ split中获取值,请执行以下操作:
split=5 bash ./automate.sh
那将解决错误。
但是,查看您的Docker食谱,有一种更好的方法。
实际上,在构建时根本没有使用您的Docker ARG split参数。仅在CMD中引用了它,这就是为什么它为空的原因。要在运行时(而不是构建时)在 shell 程序内部引用它,您需要使用ENV。从构建时开始无法指定ENV值,而是在运行时使用docker run命令指定。您只能在Dockerfile中指定其默认值。
最后,由于您仅在CMD中使用了split,因此可能根本不使用ENV,而只需在docker run位置参数中将其指定为命令参数即可。就像这样:
docker run myimage python script.py 5

关于python - 无法解决以10为底的int()的基本错误无效文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64703362/

相关文章:

python - 在做其他事情的同时,每隔 n 分钟定期执行一次函数

Python 哪个线程先启动?

python - 如何比较具有相同继承的@dataclass 的实例子类

python - 将大型 (10gb) 时间序列 CSV 文件处理为每日文件

python - 如何使用 Selenium 来点击某些东西

python - 使用python中的struct模块打包和解包可变长度数组/字符串

java - 使用 Docker for Mendix 可以带来什么不同?

ruby-on-rails - rails docker-compose db :create db:migrate 的最佳实践

docker - Hyperledger-部署到多个主机时Docker群集失败

python - 如何按长度对单词列表进行排序