【问题标题】:Docker + OpenResty - flexible configuration. How to?Docker + OpenResty - 灵活的配置。如何?
【发布时间】:2018-08-28 23:31:12
【问题描述】:

我有使用 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。我怎样才能避免这种情况?

【问题讨论】:

    标签: docker nginx deployment lua openresty


    【解决方案1】:

    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. 不要使用 lua_package_path 指令,默认值应该可以。

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

    【讨论】:

    • 感谢您的回答。我已经根据您的建议修改了我的方法,现在看起来一切都很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 2022-08-23
    • 2017-06-04
    • 2020-04-02
    相关资源
    最近更新 更多