Docker + OpenResty - 灵活配置。如何?

Docker + OpenResty - flexible configuration. How to?

我有使用 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

所以我也有 my-app.conf 存储在 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。我该如何避免这种情况?

IMO,你的方法不一致。

您复制 nginx.conf 文件,但为 my-app.conf 安装一个卷(它包含在 nginx.conf 中吗?)

奇怪的是 $(CURRENT_DIRECTORY)/conf 被安装了两次 - 作为 /srv/www/my-app/conf/etc/nginx/conf.d

以下是我对 OpenResty 容器的处理方法:

  1. 写简单的 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. 的相对路径
  6. 不要使用 lua_package_path 指令,默认值应该有效。

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