软件包不会安装在Docker中

问题描述

我正在尝试从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 . .

谢谢!

解决方法

您似乎没有充分利用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阶段。

,

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

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

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...