基于Docker镜像运行多个Python主文件:无需重新构建镜像即可运行setup.py的方法
不用重新构建镜像,教你运行setup.py的几种方法
完全不用重新构建镜像!Docker提供了好几种灵活的方式,能让你在现有镜像里直接运行不同的脚本,下面给你具体说几个实用的办法:
方法1:直接替换Entrypoint运行setup.py
因为你的镜像用了ENTRYPOINT定义默认入口,所以可以在docker run命令里用--entrypoint参数覆盖原有的入口命令,直接指定运行setup.py的指令。具体命令如下:
docker run --entrypoint "conda" myproject run --no-capture-output -n myproject python ./setup.py
简单解释下:这里保留了原Entrypoint里的conda命令,后面跟着的参数换成了运行setup.py的指令,这样就能在同一个conda环境里执行你的配置脚本了。
方法2:进入临时容器执行命令
如果想在容器里交互式操作,或者需要分步执行setup.py的逻辑,可以先启动一个临时容器,再进入容器内部操作:
- 启动一个保持运行状态的临时容器(用
tail -f /dev/null让容器不自动退出):
docker run -d --name temp-myproject myproject tail -f /dev/null
- 进入容器的bash终端:
docker exec -it temp-myproject bash
- 在容器里激活conda环境并运行setup.py:
conda activate myproject python ./setup.py
- 操作完成后,别忘了停止并删除临时容器:
docker stop temp-myproject && docker rm temp-myproject
方法3:调整Entrypoint+CMD(适合长期灵活使用)
如果以后你经常需要切换运行不同的脚本,可以下次构建镜像时调整Entrypoint和CMD的组合,让镜像更灵活:
ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "myproject", "python"] CMD ["./myprojectmain.py", "--config", "./config.py"]
这样平时运行docker run myproject还是默认执行主脚本,要运行setup.py只需要在命令末尾指定脚本路径:
docker run myproject ./setup.py
不过这个方法需要下次构建镜像时调整,现在用前两种方法就完全能解决你的问题啦。
这些方案都不需要重新构建镜像,直接用现有镜像就能搞定~
内容的提问来源于stack exchange,提问作者user5326446
相关产品推荐
相关产品推荐

