Docker + OpenResty - 灵活的配置方式。如何实现?

我有一个使用 Docker 部署的 OpenResty 应用程序。

我的 Docker 文件:

FROM openresty/openresty:alpine-fat

ARG APPLICATION_PATH="/srv/www/my-app"

COPY nginx.conf /usr/local/openresty/nginx/conf

RUN mkdir ${APPLICATION_PATH}

我用这个命令运行 Docker:

docker run -v $(CURRENT_DIRECTORY):/srv/www/my-app -v $(CURRENT_DIRECTORY)/conf:/etc/nginx/conf.d --name="$(APP_NAME)" -p $(PORT):80 -d $(CONTAINER_NAME)

这个命令存储在 Makefile 中,并且变量值如下:

CONTAINER_NAME = my-app
APP_NAME = my-app

override PORT = 8080

ifeq ($(OS),Windows_NT)
    CURRENT_DIRECTORY=%cd%
else
    CURRENT_DIRECTORY=${PWD}
endif

因此,我在 conf 目录中存储了 my-app.conf。这是 nginx 配置文件,其中有这一行:

content_by_lua_file '/srv/www/my-app/main.lua';

而在 nginx.conf 中,有这一行:

lua_package_path ";;/srv/www/my-app/?.lua;/srv/www/my-app/application/?.lua";

我不希望在这 3 个文件中重复出现 /srv/www/my-app。我该如何避免这种情况?

点赞
用户2060502
用户2060502

IMO, your approach is not consistent.

你复制了nginx.conf文件,但却挂载了一个my-app.conf的卷(它是否包含在nginx.conf中?)

有趣的是,$(CURRENT_DIRECTORY)/conf被挂载了两次——作为/srv/www/my-app/conf/etc/nginx/conf.d.

以下是我OpenResty容器的做法:

  1. 编写一个简单的不包含include的nginx.conf文件。像你一样把它复制到容器中。 挂载包含nginx.conf的文件夹的唯一原因是能够在更改后重新加载nginx配置。请记住——如果您只挂载了单个文件,重载可能无法工作。https://github.com/docker/for-win/issues/328

  2. 复制所有在*_by_lua_file指令中提到的Lua文件到/usr/local/openresty/nginx

  3. 将所有需要从上述文件中复制的Lua文件(如果有)复制到/usr/local/openresty/lualib

  4. 不要在*_by_lua_file指令中使用绝对文件路径,您可以指定相对路径/usr/local/openresty/nginx

  5. 不要使用lua_package_path指令,使用默认值即可。

这里是简单的工作实例https://gist.github.com/altexy/8f8e08fd13cda25ca47418ab4061ce1b

2018-03-21 21:23:39