我正在尝试对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来构建它
答案 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