'nginx: error while loading shared libraries: libpcre.so.1'

492 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

我用dockerfile创建了一个nginx镜像,但是在启动的时候,没有启动成功,查看镜像日志,看到如下错误:

./nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

我的dockerfile如下:

FROM alpine:latest

LABEL AUTHOR="ZHG"

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \
    apk update && apk upgrade && \ 
    apk add --no-cache --virtual .build-deps \ 
    wget \
    gcc \
    make \
    libc-dev \
    openssl \
    openssl-dev \
    gzip curl \
    pcre-dev \
    zlib-dev && \
    wget https://nginx.org/download/nginx-1.20.1.tar.gz && \
    tar -zxvf nginx-1.20.1.tar.gz

WORKDIR /nginx-1.20.1

RUN addgroup -S nginx &&\ 
    adduser -S -G nginx -s /sbin/nologin -h /usr/local/nginx nginx && \
    ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && \
    make && make install && \
    apk del .build-deps && \
    ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/ && \
    rm -rf /var/cache/apk/* && \
    mkdir -p /usr/local/nginx/conf/incloud && \
    mkdir -p /data/nginx/logs && \
    mkdir -p /data/nginx/www && \
    touch /data/nginx/logs/access.log && \
    touch /data/nginx/logs/error.log

# COPY nginx.conf /usr/local/nginx/conf/nginx.conf
# COPY ./conf.d/* /usr/local/nginx/conf/incloud

EXPOSE 80 443

CMD ["nginx", "-g", "daemon off;"]

如果出现这种情况,你可能时犯了以下三种错误:

  • 没有安装pcre
  • 编译和安装nginx的时候,没有使用pcre
  • pcre包没有设置全局变量 LD_LIBRARY_PATH

解决方案:

查看是否安装了pcre

$ find / -name libpcre.so.1 
/usr/local/lib/libpcre.so.1  ## 如果安装了,则会出现这一行内容,如果没有安装,则不会出现

如果没有安装,则你可以使用下面的语句安装:

$ apk add pcre  ##alpine
$ yum install pcre  ## centos

安装完pcre之后,然后设置环境变量:

$export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

然后在删除镜像,重新build一下之后,就可以正常启动了。

Refenence

写在最后

欢迎大家关注鄙人的公众号【麦田里的守望者zhg】,让我们一起成长,谢谢。 微信公众号