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

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

我的dockerfile如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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

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

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

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

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

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

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

Refenence

写在最后

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