我用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 | $ find / -name libpcre.so.1 |
如果没有安装,则你可以使用下面的语句安装:
1 | $ apk add pcre ##alpine |
安装完pcre
之后,然后设置环境变量:
1 | $export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH |
然后在删除镜像,重新build
一下之后,就可以正常启动了。
Refenence
写在最后
欢迎大家关注鄙人的公众号【麦田里的守望者zhg】,让我们一起成长,谢谢。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment