@zslzxc
        
        2018-03-06T07:29:00.000000Z
        字数 7816
        阅读 3409
    openresty docker lor
Docker部署Openresty + Lor + Openresty-china总体来说不难,但是还是有许多问题,这些问题一个是不细心造成的,一个是无知造成的,所以,我都会一一记下来。
因为我们要安装Lor所以,我们不直接使用官方镜像,而是通过修改Dockerfile来创建自己的镜像。
# Dockerfile - CentOS 7# https://github.com/openresty/docker-openrestyFROM centos:7LABEL maintainer="Evan Wies <evan@neomantra.net>"# Docker Build ArgumentsARG RESTY_VERSION="1.13.6.1"ARG RESTY_LUAROCKS_VERSION="2.4.3"ARG RESTY_OPENSSL_VERSION="1.0.2k"ARG RESTY_PCRE_VERSION="8.41"ARG RESTY_J="1"ARG RESTY_CONFIG_OPTIONS="\--with-file-aio \--with-http_addition_module \--with-http_auth_request_module \--with-http_dav_module \--with-http_flv_module \--with-http_geoip_module=dynamic \--with-http_gunzip_module \--with-http_gzip_static_module \--with-http_image_filter_module=dynamic \--with-http_mp4_module \--with-http_random_index_module \--with-http_realip_module \--with-http_secure_link_module \--with-http_slice_module \--with-http_ssl_module \--with-http_stub_status_module \--with-http_sub_module \--with-http_v2_module \--with-http_xslt_module=dynamic \--with-ipv6 \--with-mail \--with-mail_ssl_module \--with-md5-asm \--with-pcre-jit \--with-sha1-asm \--with-stream \--with-stream_ssl_module \--with-threads \"ARG RESTY_CONFIG_OPTIONS_MORE=""# These are not intended to be user-specifiedARG _RESTY_CONFIG_DEPS="--with-openssl=/tmp/openssl-${RESTY_OPENSSL_VERSION} --with-pcre=/tmp/pcre-${RESTY_PCRE_VERSION}"# 1) Install yum dependencies# 2) Download and untar OpenSSL, PCRE, and OpenResty# 3) Build OpenResty# 4) CleanupRUN yum install -y \gcc \gcc-c++ \gd-devel \gettext \GeoIP-devel \libxslt-devel \make \perl \perl-ExtUtils-Embed \readline-devel \unzip \zlib-devel \git \&& cd /tmp \&& curl -fSL https://www.openssl.org/source/openssl-${RESTY_OPENSSL_VERSION}.tar.gz -o openssl-${RESTY_OPENSSL_VERSION}.tar.gz \&& tar xzf openssl-${RESTY_OPENSSL_VERSION}.tar.gz \&& curl -fSL https://ftp.pcre.org/pub/pcre/pcre-${RESTY_PCRE_VERSION}.tar.gz -o pcre-${RESTY_PCRE_VERSION}.tar.gz \&& tar xzf pcre-${RESTY_PCRE_VERSION}.tar.gz \&& curl -fSL https://openresty.org/download/openresty-${RESTY_VERSION}.tar.gz -o openresty-${RESTY_VERSION}.tar.gz \&& tar xzf openresty-${RESTY_VERSION}.tar.gz \&& cd /tmp/openresty-${RESTY_VERSION} \&& ./configure -j${RESTY_J} ${_RESTY_CONFIG_DEPS} ${RESTY_CONFIG_OPTIONS} ${RESTY_CONFIG_OPTIONS_MORE} \&& make -j${RESTY_J} \&& make -j${RESTY_J} install \&& cd /tmp \&& rm -rf \openssl-${RESTY_OPENSSL_VERSION} \openssl-${RESTY_OPENSSL_VERSION}.tar.gz \openresty-${RESTY_VERSION}.tar.gz openresty-${RESTY_VERSION} \pcre-${RESTY_PCRE_VERSION}.tar.gz pcre-${RESTY_PCRE_VERSION} \&& curl -fSL https://github.com/luarocks/luarocks/archive/${RESTY_LUAROCKS_VERSION}.tar.gz -o luarocks-${RESTY_LUAROCKS_VERSION}.tar.gz \&& tar xzf luarocks-${RESTY_LUAROCKS_VERSION}.tar.gz \&& cd luarocks-${RESTY_LUAROCKS_VERSION} \&& ./configure \--prefix=/usr/local/openresty/luajit \--with-lua=/usr/local/openresty/luajit \--lua-suffix=jit-2.1.0-beta3 \--with-lua-include=/usr/local/openresty/luajit/include/luajit-2.1 \&& make build \&& make install \&& cd /tmp \&& rm -rf luarocks-${RESTY_LUAROCKS_VERSION} luarocks-${RESTY_LUAROCKS_VERSION}.tar.gz \&& yum clean all \&& ln -sf /dev/stdout /usr/local/openresty/nginx/logs/access.log \&& ln -sf /dev/stderr /usr/local/openresty/nginx/logs/error.log# Add additional binaries into PATH for convenienceENV PATH=$PATH:/usr/local/openresty/luajit/bin:/usr/local/openresty/nginx/sbin:/usr/local/openresty/bin# 安装LorRUN cd /tmp \&& git clone https://github.com/sumory/lor \&& cd lor \&& make install \&& rm -rf /tmp/lor# Copy nginx configuration filesCOPY docker-ng-conf/nginx.conf /usr/local/openresty/nginx/conf/nginx.confCOPY docker-ng-conf/default.conf /etc/nginx/conf.d/default.confCMD ["/usr/local/openresty/bin/openresty", "-g", "daemon off;"]
version: "2"services:pcsoft:build: /data/docker/openrestyports:- "8080:80"- "8888:8888"- "8881:8881"- "8882:8882"# links:# - "db"volumes: # 注意,要么使用相对路径,要么使用绝对路径,切勿使用变量- ./www:/www/restart: always# networks:# - ng_pc# command: nginx -g "daemon off;" -p /www/pcsoft/ -c /www/pcsoft/conf/nginx-dev.confdb:image: mysql:5.7volumes:- ./dbdata:/var/lib/mysql/# - $PWD/opchina/install:/mysql/expose:- "3306"ports:- "3306:3306"# restart: alwaysenvironment:MYSQL_USER: rootMYSQL_PASSWORD: rootMYSQL_ROOT_PASSWORD: rootrestart: always# networks:# ng_pc:# networks:# ng_pc:
git clone git@github.com:sumory/openresty-china.git
CREATE DATABASE `blog` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
[root@575bb7bcc482 openresty-china]# lsLICENSE README.md conf install start.shLICENSE.md app docs reload.sh stop.sh[root@575bb7bcc482 openresty-china]# mkdir static[root@575bb7bcc482 openresty-china]# cd static/[root@575bb7bcc482 static]# ls[root@575bb7bcc482 static]# cp ../install/avatar/* ./[root@575bb7bcc482 static]# ls1.png 5.png 9.png d.png h.png l.png p.png t.png x.png2.png 6.png a.png e.png i.png m.png q.png u.png y.png3.png 7.png b.png f.png j.png n.png r.png v.png z.png4.png 8.png c.png g.png k.png o.png s.png w.png[root@575bb7bcc482 static]# cd ..[root@575bb7bcc482 openresty-china]# lsLICENSE README.md conf install start.sh stop.shLICENSE.md app docs reload.sh static[root@575bb7bcc482 openresty-china]# rm -rf install/[root@575bb7bcc482 openresty-china]# lsLICENSE README.md conf reload.sh staticLICENSE.md app docs start.sh stop.sh[root@575bb7bcc482 openresty-china]#

 docker-composer up 时一定要注意所在目录。解决方法:一定不要关闭sudo,每条Docker命令前都要加sudo。
amor@amor:/data/docker/openresty$ docker-compose up --build -dBuilding pcsoftTraceback (most recent call last):File "/usr/bin/docker-compose", line 11, in <module>load_entry_point('docker-compose==1.8.0', 'console_scripts', 'docker-compose')()File "/usr/lib/python2.7/dist-packages/compose/cli/main.py", line 61, in maincommand()File "/usr/lib/python2.7/dist-packages/compose/cli/main.py", line 113, in perform_commandhandler(command, command_options)File "/usr/lib/python2.7/dist-packages/compose/cli/main.py", line 835, in upremove_orphans=remove_orphans)File "/usr/lib/python2.7/dist-packages/compose/project.py", line 382, in upsvc.ensure_image_exists(do_build=do_build)File "/usr/lib/python2.7/dist-packages/compose/service.py", line 289, in ensure_image_existsself.build()File "/usr/lib/python2.7/dist-packages/compose/service.py", line 727, in buildbuildargs=build_opts.get('args', None),File "/usr/lib/python2.7/dist-packages/docker/api/build.py", line 54, in buildpath, exclude=exclude, dockerfile=dockerfile, gzip=gzipFile "/usr/lib/python2.7/dist-packages/docker/utils/utils.py", line 103, in tart.add(os.path.join(root, path), arcname=path, recursive=False)File "/usr/lib/python2.7/tarfile.py", line 2024, in addwith bltn_open(name, "rb") as f:IOError: [Errno 13] Permission denied: '/data/docker/openresty/dbdata/auto.cnf'

解决办法就是修改nginx 配置文件中lua的路径。(可能会遇到新问题)
lua_package_path "./app/?.lua;./app/library/?.lua;./app/?/init.lua;./?.lua;/usr/local/lor/?.lua;/usr/local/lor/?/init.lua;;";lua_package_cpath "./app/library/?.so;/usr/local/lor/?.so;;";lua_code_cache on; # set on @production
 
解决方法: 
进到容器里, cat /etc/resolv.conf,然后修改nginx配置
resolver 127.0.0.11;注意:这个值一定要和容器中的resolv.conf值一致!
amor@amor-PC:/data/docker/docker-openresty-lor$ sudo docker logs dockeropenrestylor_db_1Initializing database2018-03-06T03:13:31.337602Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).2018-03-06T03:13:31.338815Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.2018-03-06T03:13:31.338831Z 0 [ERROR] Aborting
解决方法: 
保证数据挂载目录为空!
 
解决方法: 
修改位local lib = C