如何通过Makefile命令进入Docker容器并自动启动pipenv shell
原写法错误原因
你原来的写法逻辑是在宿主机层面执行命令:先运行docker exec -ti my_container_name bash启动容器内的bash进程,等你手动退出这个bash之后,宿主机才会执行后面的pipenv shell命令,完全没有实现容器内启动虚拟环境的效果。
需求完全可以实现,以下是具体方案
方案1:直接将pipenv shell传给容器内的bash执行
直接修改Makefile中的命令,把pipenv shell作为参数传给容器内的bash运行即可:
to-container: docker exec -ti my_container_name bash -c "pipenv shell"
如果执行时提示找不到pipenv命令,说明pipenv的安装路径不在容器非登录shell的PATH中,换成登录shell模式即可:
to-container: docker exec -ti my_container_name bash -l -c "pipenv shell"
如果你的项目目录不是docker exec的默认工作目录,需要先手动切换目录:
to-container: docker exec -ti my_container_name bash -c "cd /你的项目在容器内的绝对路径 && pipenv shell"
方案2:写入bash启动配置(适合所有进入容器的场景都自动加载pipenv环境)
如果你希望只要进入容器的bash就自动启动pipenv shell,可以在构建Docker镜像时,将pipenv shell写入容器内对应用户的.bashrc文件末尾,比如root用户就是/root/.bashrc,普通用户就是/home/用户名/.bashrc。后续再执行原来的docker exec -ti my_container_name bash命令就会自动进入pipenv虚拟环境。
注意事项
执行命令必须保留-ti参数,-t是分配伪终端,-i是保持标准输入打开,两者缺一不可,否则pipenv shell作为交互式命令无法正常启动。
内容的提问来源于stack exchange,提问作者Viljami
相关产品推荐
相关产品推荐

