Docker中指定`poetry env use system`,Poetry仍创建虚拟环境
问题解决:Docker-Compose运行时Poetry自动创建虚拟环境导致找不到Uvicorn
问题分析
单独用docker run进入容器后,pip list、poetry env info、which uvicorn均显示依赖已正确安装到系统Python中,但通过Docker-Compose运行时,Poetry却自动创建新的虚拟环境,提示Command not found: uvicorn。核心原因是构建阶段设置的Poetry配置未在运行时生效,导致Poetry回到默认行为创建虚拟环境,而新虚拟环境中没有安装项目依赖。
解决方案
修改Dockerfile中安装依赖的RUN命令,明确全局禁用Poetry虚拟环境创建,并绑定系统Python:
# 替换原有的安装依赖RUN命令 RUN poetry config virtualenvs.create false --global \ && poetry env use system \ && poetry install
关键说明
poetry config virtualenvs.create false --global:将禁用虚拟环境创建设为Poetry全局配置,确保容器运行时无论哪个上下文都遵循该规则,避免被项目本地配置覆盖。- 后续的
poetry env use system和poetry install确保依赖直接安装到系统Python环境中。
额外步骤
执行以下命令重新构建镜像,避免缓存导致配置未更新:
docker-compose build --no-cache
验证
重新启动Docker-Compose服务后,Poetry将不再创建虚拟环境,直接使用系统Python中的依赖,uvicorn命令可正常执行。
内容的提问来源于stack exchange,提问作者tconsta
相关产品推荐
相关产品推荐

