尝试在 docker 容器内整齐地安装 pip 时出现 OSError

lat*_*s64 4 python geos shapely docker-compose

找不到库 geos_c 或加载其任何变体 ['libgeos_c.so.1', 'libgeos_c.so']

使用 python:3.5.1 图像我试图运行一个容器,其中包括它安装在 requirements.txt 中的其他内容。当 docker 容器尝试安装匀称时,我收到上述错误。

运行 apt-get install libgeos-dev

是我在尝试搜索问题时看到的,但返回无法找到包 libgeos-dev

概括:

预期条件:在 requirements.txt 文件中包含 shapely 导致在构建 docker 容器时安装 shapely 实际条件:构建期间收到错误消息 Could not find library geos_c or load any of its variants ['libgeos_c.so.1', 'libgeos_c.so']

重现步骤:

使用 docker-compose 构建

Docker-compose.yml:

app:
        build: ${APP_REPO}
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

FROM python:3.5.1-onbuild
Run Code Online (Sandbox Code Playgroud)

要求.txt:

shapely
Run Code Online (Sandbox Code Playgroud)

(简化为尝试隔离问题。)

Tus*_*eth 5

对于 alpine,只需运行以下 Docker 命令:

RUN apk add --no-cache \
gcc \
libc-dev \
geos-dev \
&& pip install shapely
Run Code Online (Sandbox Code Playgroud)

这将安装 shapely 的所有适当依赖项的 geo 和 C 相关依赖项的 shapely for alpine

  • 这对于我的“python:3-alpine” docker 镜像不起作用。 (2认同)

lat*_*s64 3

我从以下位置找到了解决方案:https://github.com/calendar42/docker-python-geos/blob/master/Dockerfile

ENV PYTHONUNBUFFERED 1

#### Install GEOS ####
# Inspired by: https://hub.docker.com/r/cactusbone/postgres-postgis-sfcgal/~/dockerfile/

ENV GEOS http://download.osgeo.org/geos/geos-3.5.0.tar.bz2

#TODO make PROCESSOR_COUNT dynamic
#built by docker.io, so reducing to 1. increase to match build server processor count as needed
ENV PROCESSOR_COUNT 1

WORKDIR /install-postgis

WORKDIR /install-postgis/geos
ADD $GEOS /install-postgis/geos.tar.bz2
RUN tar xf /install-postgis/geos.tar.bz2 -C /install-postgis/geos --strip-components=1
RUN ./configure && make -j $PROCESSOR_COUNT && make install
RUN ldconfig
WORKDIR /install-postgis
Run Code Online (Sandbox Code Playgroud)

我将其复制到我的 dockerfile 行之前

pip install requirements.txt
Run Code Online (Sandbox Code Playgroud)

形状优美的安装成功了。

它偶尔会停止构建,但主要问题已经解决。