当前位置: 首页 > 知识库问答 >
问题:

在运行时向docker映像添加pip要求

慕佑运
2023-03-14

我希望能够添加一些额外的要求到自己的创建docker图像。我的策略是使用CMD命令从dockerfile构建映像,该命令将在运行时使用挂载的卷执行“pip install-r”命令。

这是我的DockerFile:

FROM ubuntu:14.04

RUN apt-get update
RUN apt-get install -y python-pip python-dev build-essential 
RUN pip install --upgrade pip

WORKDIR /root

CMD ["pip install -r /root/sourceCode/requirements.txt"]

有了dockerfile,我构建了映像:

sudo docker build -t test .
sudo docker run -v $(pwd)/sourceCode:/root/sourceCode -it test /bin/bash

共有1个答案

裴存
2023-03-14

pip命令未运行,因为您告诉Docker改为运行/bin/bash

docker run -v $(pwd)/sourceCode:/root/sourceCode -it test /bin/bash
                                                              ^
                                                             here

容器的默认入口点/bin/sh-c。您不在Dockerfile中重写它,所以它仍然存在。默认的cmd指令可能是空的。您可以在DockerFile中覆盖它。运行时(为简洁起见,忽略音量)

docker run -it test

在容器内实际执行的是

/bin/sh -c pip install -r /root/sourceCode/requirements.txt
docker run -v -it test /bin/bash
/bin/sh -c /bin/bash

您在Dockerfile中指定的cmd参数将被您在命令行中指定的command覆盖。记得docker run命令的形式如下

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

>

  • 这个答案对cmdentrypoint指令的作用有一个切中要害的解释

    entrypoint指定一个在容器启动时始终执行的命令。

  •  类似资料:
    • 问题内容: 我为持续集成有一个jenkins实例(实际上在docker内部运行)。 jenkins服务器在外部docker主机上构建docker映像,对其进行测试,然后将其推送到标记。 现在,当我构建发行版时,我想将docker映像从测试重新标记为。我 不 希望重建一个新的标签的形象,我想重新标记现有的图像。 詹金斯怎么办?我正在查看jenkins插件,找不到具有此功能的任何插件。 问题答案: 由

    • 问题内容: 我有一个Docker映像,它是一个node.js应用程序。该应用程序从本地运行的Redis检索一些配置值。因此, 我试图在Docker映像内的同一容器内安装和运行Redis。 如何扩展Docker文件并在其中配置Redis? 到目前为止,Dockerfile如下: 从节点:碳 WORKDIR / app COPY package.json / app 运行npm安装 复制。/ app

    • 我有一个Docker映像,它是一个Node.js应用程序。应用程序从本地运行的Redis检索一些配置值。因此,我试图在Docker映像的同一容器中安装和运行Redis。 我如何扩展Docker文件并在其中配置Redis? 截至目前,Dockerfile如下所示:

    • 问题内容: 我尝试在构建映像的同时使用Docker安装软件,然后得到了。 我使用的Dockerfile 有没有一种方法可以在Dockerfile中运行docker命令来创建映像? 问题答案: 您的问题不在于Docker命令,因为它在错误消息中表示您的Docker守护程序未运行,或者由于某些配置问题而无法连接到它。 您刚刚安装了Docker吗?您是否完成了《安装指南》中的所有步骤? 您可以使用或来测

    • 在运行时添加到当单击时。 我使用以下代码: 但是在中没有显示任何。

    • 目前,我发现谷歌云构建发生在构建docker图像的时候(不像我想象的那样,它会构建我的图像,然后执行我的图像来完成所有的构建)。那是在这篇文章里 谷歌云构建的快速启动 我有一个Dockerfile现在很简单 我有一个单一的下载和提取下载任何工件(zip文件)从最后的单构建运行构建(只有修改的服务器被构建或依赖于上一个CI构建的变化的服务器被构建,就像下游库可能被更改)。第一行只是列出了我需要在一个