【问题标题】:How to conditionally run different configs in docker-compose.yml?如何有条件地在 docker-compose.yml 中运行不同的配置?
【发布时间】:2017-09-20 16:51:18
【问题描述】:

我已经在实时服务器上通过certbot 配置了 SSL。我在docker-compose.ymlnginx 部分有一个卷映射:

volumes:
  ...
  - /etc/letsencrypt:/etc/letsencrypt

这在实时服务器上工作得很好,但我在本地机器上有一个不同的设置,我运行应用程序并在http://localhost 上看到它。我想我的本地机器上不需要 SSL,所以如果它在本地运行,我可能只能排除这部分设置。

此外,这种情况让我觉得我可能不得不在本地和现场配置一些不同的东西。

那么,问题是如何正确区分本地设置和实时设置之间的这些差异,并根据环境(半)自动应用它们?

【问题讨论】:

  • 旋转 2 个不同名称和卷的不同容器在本地和实时之间没有区别吗?

标签: docker nginx deployment


【解决方案1】:

环境变量通常是创建像这样的简单运行时可移植性的好方法,许多工具/应用程序/包仅通过环境变量来支持运行时配置。不幸的是,nginx 不是这些应用程序之一

对于 nginx,请尝试以下操作:

environment:
  - NGINX_CONF=localhost.conf

在这里,localhost.conf 将是您本地机器的 nginx 配置。运行某种 entrypoint.sh,并将 NGINX_CONF 指定的配置符号链接到 nginx 将选择它的任何位置(通常是 /etc/nginx/conf.d 或 /etc/nginx/sites-enabled)。

ln -s /etc/nginx/conf.d/running.conf /app/nginx-confs/${NGINX_CONF}

这假设您已将所有配置文件复制到 /app/nginx-confs 中的容器中,但它们可以放在您喜欢的任何地方。 localhost.conf 将作为http://localhost 为您的站点提供服务。

对于您的实时服务器,传递 NGINX_CONF=liveserver.conf。此 conf 将服务于 https://www.liveserver.com 或您托管的任何内容。

此时,您可以使用环境变量选择在启动容器时将运行的 nginx 配置。即使您不想这样做,也希望它能让您朝着正确的方向前进,并将环境变量视为一种在运行时进行配置的方式。


还有其他更精细的方法可以在运行时管理 nginx 配置文件。 confd 之类的东西或mustache templating engine 之类的模板引擎都是可选的。 nginx 中有 env 指令和 set_by_lua 的迂回方式,但这对我来说感觉是最 hacky 的解决方案,所以我更喜欢其他的。

【讨论】:

    【解决方案2】:

    您可以根据需要编写Makefile 来生成不同的docker-compose.yml 文件。

    生成文件:

    # Makefile
    -include config.mk
    
    A_CONFIG_VAR ?= default_value
    
    all: docker-compose.yml
    
    docker-compose.yml: docker-compose.yml.in config.mk
            @echo 'Generating docker-compose.yml'
            @sed -e 's|@@A_CONFIG_VAR@@|$(A_CONFIG_VAR)|g' $< > $@
    

    config.mk:把你的配置变量放在这个文件中。

    # config.mk
    A_CONFIG_VAR = "a_value"
    

    docker-compose.yml.in:像这样写一个输入 docker-compose.yml 文件

    volumes:
      - /path/to/somewhere:@@A_CONFIG_VAR@@
    

    更改config.mk 的内容以满足您的需要。然后运行

    make
    

    这应该会为您生成一个docker-compose.yml 文件。

    【讨论】:

      猜你喜欢
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-07
      相关资源
      最近更新 更多