本文已参与「新人创作礼」活动,一起开启掘金创作之路。
我用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】,让我们一起成长,谢谢。