这个答案有点晚了,但对于任何未来的读者来说,我想让它更多地针对所提出的问题,即关于 argparse。
@Chris 指出的基本思想就是它。实现该解决方案的一种方法是将参数传递给 docker run 命令本身中的image。然后这些参数将传递给您的ENTRYPOINT,从而传递给 python 脚本。
这些文件通常看起来像这样..
文件.py
>
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('pos', type=str, help='Example Positional Argument') # will be accesible under args.POS
parser.add_argument('--opt', type=str , help='Example Optional Argument') # will be accesible with args.OPT
args = parser.parse_args()
# do something with pos and OPT
如果没有 docker,你会以 python file.py --opt opt_val pos_val 运行这个文件(假设它在 pwd 中)
Dockerfile
FROM python:<your_tag>
COPY ./file.py ./ # Assuming your Dockerfile and file.py are in the same directory
# some custom build steps
ENTRYPOINT ["python","./file.py"]
Docker 构建和运行命令
你用这个构建:docker build --tag example:0.0.1 <dir>
下面显示了多行(为了更好的可读性)运行命令,
Docker 运行
docker run --rm \
--name example.container \
example:0.0.1 \
--opt=opt_val \
POS=pos_value
Docker 运行(powershell)
docker run --rm `
--name example.container `
example:0.0.1 `
--opt=opt_val `
POS=pos_value
所以这里有几点要记住:
- Argparse 支持添加位置参数和可选参数,应相应地传递给
docker run 命令中的image。
- 上面指出的解决方案有效,但不如 id 通常那样灵活。最好使用环境变量并通过
os.environ() 访问脚本内部。
- 使用此解决方案,您无需将任何内容“硬编码”到 Dockerfile 中