【问题标题】:Packages wont install in docker软件包不会安装在 docker 中
【发布时间】:2020-12-03 10:41:06
【问题描述】:

我正在尝试从 Dockerfile 将 tesseract-ocr 安装到 docker。当我构建 Dockerfile 时,一切看起来都很正常,我没有收到任何错误,但是当我运行容器时,没有安装 tesseract。

如果我使用 sudo docker exec -t -i <container_id> /bin/bash 访问容器并使用 apt-get install -y tesseract-ocr-all 手动安装 tesseract,它会安装并完美运行。为什么我在构建过程中尝试安装它时它不起作用?

我的 Dockerfile 如下所示:

FROM ubuntu:20.04

ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update \
    && apt-get install -y tesseract-ocr-all
RUN tesseract --version

FROM python:3.7

WORKDIR ocr
COPY requirements.txt .
RUN pip3 install --no-cache-dir -r requirements.txt
COPY . .

谢谢!

【问题讨论】:

  • 为什么这个 Dockerfile 中有另一个 FROM python:3.7?我想这会改变基础图像,因此您之前的操作将不起作用
  • 首先,您有 2 个FROM,如果没有COPY 之前的FROM 命令,这将无法工作。如果你想使用当前的结构,那么你正在寻找多阶段构建。如果没有,使用 Python 基础镜像也可以通过RUN apt-get -y install tesseract-ocr 安装tesseract-ocr

标签: docker ubuntu-20.04


【解决方案1】:

您似乎在利用 Docker multi-stage builds 却没有意识到这一点。

当你输入FROM python:3.7 时,你基本上放弃了你在此之上所做的一切,因为你开始了一个新阶段。

我能看到的最简单的解决方案是移动

RUN apt-get update \
    && apt-get install -y tesseract-ocr-all
RUN tesseract --version

进入FROM python:3.7 阶段,并删除FROM ubuntu:20.04 阶段。

【讨论】:

    【解决方案2】:

    您需要切换用户,因为您可能没有运行这些命令的权限。这样的事情应该可以工作:

    USER root
    RUN apt-get update \
        && apt-get install -y tesseract-ocr-all
    USER <switch back to previous user>
    

    您需要弄清楚要切换回的默认用户是什么,您可能可以在 Ubuntu 文档中找到或使用 whoami

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      • 2020-01-08
      • 1970-01-01
      • 1970-01-01
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多