无法在Dockerfile中找到软件包sqlite3

qc6wkl3g  于 12个月前  发布在  Docker
关注(0)|答案(1)|浏览(259)

我是一个使用Docker构建容器的新手,我经常使用conda环境进行日常工作,但是这次我需要使用一个只允许运行Docker容器的计算服务器。我想构建一个允许我运行Pytorch代码的镜像。我准备了如下内容,一个用于深度学习应用程序的非常常见的Dockerfile:

FROM nvidia/cuda:12.2.0-devel-ubuntu20.04

CMD ["bash"]

ENV LANG=C.UTF-8 LC_ALL=C.UTF-8

ENV SHELL=/bin/bash

RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
    && apt-get -y install --no-install-recommends \
        git \
        wget \
        cmake \
        ninja-build \
        build-essential \
        python3 \
        python3-dev \
        python3-pip \
        python3-venv \
        python-is-python3 \
    && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* 

RUN apt-get install sqlite3

ENV VIRTUAL_ENV=/opt/python3/venv/base
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

RUN python3 -m pip install --upgrade pip

RUN pip install jupyterlab

RUN python3 -m pip install pandas

RUN pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

COPY entry_point.sh /entry_point.sh
RUN chmod +x /entry_point.sh

# Set entrypoint to bash
ENTRYPOINT ["/entry_point.sh"]

字符串
在构建容器时,我得到以下错误:

E: Unable to locate package sqlite3


当我删除sqlite3安装行时,镜像构建,当我运行相应的容器并尝试在CLI中使用相同的命令再次安装sqlite时,我得到了相同的错误。我使用的是基础镜像“nvidia/cuda:12.2.0-devel-ubuntu20.04“,它应该将Ubuntu 20.04环境沿着Cuda,然而,apt软件包管理器似乎找不到一个非常常用的工具,即Sqlite。我也在开始时在Dockerfile中调用了apt-get update。不幸的是,我没有看到这里缺少了什么。我应该使用另一个基地集装箱吗

jckbn6z7

jckbn6z71#

在Dockerfile中,

RUN apt-get update \
    && ...
    && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* 
RUN apt-get install sqlite3

字符串
第一个RUN命令的末尾会清除APT的所有状态,因此当第二个RUN apt-get install命令执行时,会忘记任何包的存在。
在第一个RUN命令中,您有一个已安装软件包的列表。将sqlite3添加到该列表中。

RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
    && apt-get -y install --no-install-recommends \
         ...
        python-is-python3 \
        sqlite3 \              # <-- move up into this list
    && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/*


增量重建会慢一些,但是如果您(或您的CI系统)从头开始构建映像,那么只调用一次APT/dpkg机制会快一些。
如果您出于某种原因确实需要将其作为单独的RUN行,则需要在第二个RUN命令中重复apt-get update。请注意,第一个RUN命令的整体结构是有意义的,只是使用了不同的包列表。

相关问题