运行搭载Python脚本的Docker容器时添加参数报错求助
问题原因分析
你遇到的错误是因为Docker run命令中,镜像名称后的内容会完全替换Dockerfile里定义的CMD指令。你当前的命令里,bucket被当成了容器启动时要执行的可执行命令,而不是传给python ./main.py的参数,系统找不到这个名为bucket的命令,所以报错。
解决方法
有两种常用方式可以正确传递参数给Python脚本:
方法1:在run命令里完整指定执行命令
把python ./main.py也写到run命令里,后面跟上你的参数,这样就不会覆盖掉原来的执行命令,而是把参数传给它:
docker run -e AWS_REGION=us-east-1 -e ARCHIVE_BUCKET=foo -e LOG_LEVEL=debug -e S3_OBJECT_SIZE_LIMIT=1200000 test-lfb python ./main.py bucket s3-object s3-object-size
方法2:修改Dockerfile使用ENTRYPOINT
修改Dockerfile,用ENTRYPOINT指令定义容器的固定入口命令,这样run命令末尾的参数会自动作为参数传给这个入口命令:
FROM python:3.9 ADD main.py . RUN pip install boto3 requests beautifulsoup4 python-dotenv ENTRYPOINT ["python", "./main.py"]
之后再运行容器时,直接在镜像名后加参数即可:
docker run -e AWS_REGION=us-east-1 -e ARCHIVE_BUCKET=foo -e LOG_LEVEL=debug -e S3_OBJECT_SIZE_LIMIT=1200000 test-lfb bucket s3-object s3-object-size
如果需要给脚本设置默认参数,还可以配合CMD使用,这样不加参数时会用默认值,加参数时会覆盖默认值:
FROM python:3.9 ADD main.py . RUN pip install boto3 requests beautifulsoup4 python-dotenv ENTRYPOINT ["python", "./main.py"] CMD ["default-param1", "default-param2"]
内容的提问来源于stack exchange,提问作者Jason Michael
相关产品推荐
相关产品推荐

