在dockerizing期间无法在高山上安装pycosat

时间:2018-10-19 14:38:22

标签: python-3.x docker docker-compose alpine

我正在尝试对django应用程序进行docker化,并且我使用 alpine:edge 作为基本映像。而且 pycosat 安装失败,并显示错误

In file included from pycosat.c:19:
picosat.c:8150:10: fatal error: sys/unistd.h: No such file or directory
 #include <sys/unistd.h>
          ^~~~~~~~~~~~~~
compilation terminated.
error: Setup script exited with error: command 'gcc' failed with exit status 1

这是我的Dockerfile的样子

FROM alpine:edge
    ENV PYTHONBUFFERED 1

    RUN apk update && \
        apk add --virtual build-deps gcc python3-dev musl-dev \
        libffi-dev openssl-dev python3 py3-zmq build-base libzmq zeromq-dev \
        curl g++ make zlib-dev linux-headers openssl ca-certificates libevent-dev

    RUN pip3 install --upgrade pip setuptools
    RUN mkdir /config
    ADD /config/requirements.txt /config/
    RUN easy_install pyzmq
    RUN easy_install pycosat
    RUN mkdir /src
    WORKDIR /src

如何安装该库?我会错过一些软件包或工具吗?

我也正在使用docker-compose来构建它

1 个答案:

答案 0 :(得分:1)

似乎pycosat与musl(Alpine中使用的libc库实现)不兼容。

musl的unistd.h头文件位于系统头文件的根文件夹/usr/include中,而不是glibc中的/usr/include/sys下(glibc是事实上的Linux libc标准),因此编译失败与fatal error: sys/unistd.h: No such file or directory

作为一种解决方法,您可以在pycosat构建步骤之前,在sys/unistd.h下创建自己的标头,其中将仅包含本机unistd.h

RUN echo "#include <unistd.h>" > /usr/include/sys/unistd.h