首页 > 解决方案 > 如何进入 docker 容器并使用 Makefile 命令启动 pipenv shell?

问题描述

我的 dockerized 项目使用 pipenv 来处理 python 依赖项、解释器等。目前我有 Makefile 命令,我可以进入我的 docker 容器:

to-container:
    docker exec -ti my_container_name bash

我希望这个命令也自动在容器内启动 pipenv shell,如下所示:

to-container:
    docker exec -ti my_container_name bash && pipenv shell

这可能吗,诀窍是什么?

标签: dockermakefilepipenv

解决方案


你不能像这样做你想做的事。现在甚至忘记docker,更不用说make了。当你调用它时它会做什么:

bash && pipenv shell

首先,它运行bash程序并等待该程序完成。其次,假设bash程序成功退出,它将运行pipenv shell。它肯定不会在程序内部运行pipenv shell命令。bash

你想要这个,或者类似的东西:

bash -c 'pipenv shell'

这将启动一个bash程序并要求它运行pipenv shell命令,然后(pipenv shell完成后)退出。 pipenv shell自己启动一个交互式外壳(据我所知,我不使用pipenv自己)。这有点恶心,因为你有两个贝壳,但这没什么大不了的。

要将其翻译成 docker,您可以使用:

docker exec -ti my_container_name bash -c 'pipenv shell'

然后把它放到你的makefile中:

to-container:
        docker exec -ti my_container_name bash -c 'pipenv shell'

推荐阅读