Docker compose docker compose 3.1(swarm)、secrets、ssl和nginx

Docker compose docker compose 3.1(swarm)、secrets、ssl和nginx,docker-compose,docker-swarm,docker-secrets,Docker Compose,Docker Swarm,Docker Secrets,我有一个nginx在docker容器中运行。在服务器块内的nginx conf文件中,我已经输入了ssl配置–端口、crt和密钥。nginx查找crt和key文件的最简单方法是为这两个文件创建一个docker secret,并在生成服务时在/run/secrets/挂载它。但是,我希望在docker映像中包含crt和密钥文件,这可以像nginx可以使用的开箱即用文件一样。如果客户创建了一个秘密,并插入crt和密钥文件,我希望nginx使用这些文件 通过3.1撰写文件文档获取机密,我意识到机密必须

我有一个nginx在docker容器中运行。在服务器块内的nginx conf文件中,我已经输入了ssl配置–端口、crt和密钥。nginx查找crt和key文件的最简单方法是为这两个文件创建一个docker secret,并在生成服务时在/run/secrets/挂载它。但是,我希望在docker映像中包含crt和密钥文件,这可以像nginx可以使用的开箱即用文件一样。如果客户创建了一个秘密,并插入crt和密钥文件,我希望nginx使用这些文件

通过3.1撰写文件文档获取机密,我意识到机密必须预先存在,或者必须作为撰写文件的一部分创建。现在的挑战是,如果它必须预先存在,那么我强制客户创建一个秘密(这意味着不仅要创建一个秘密,还要准备好crt和密钥文件作为create secret命令的输入)。如果我在compose文件中创建它,我仍然需要访问客户必须提供的crt和关键文件。这意味着,无论哪种情况,事情都不是开箱即用的

我如何解决这个问题


如果有人已经读了这么多,但仍然没有失去兴趣,即使上述问题得到解决,我面临的另一个问题是,在nginx conf中,我不能按照优先级顺序指定两个证书,以便在同一服务器块下拾取它们。有人对此也有想法吗?

我认为最好的选择是为NGINX容器创建一个自定义入口点脚本,并结合环境变量和一个“template”NGINX.conf。这些将负责正确的证书配置

您的脚本将类似(给定Alpine图像):

nginx.conf中的匹配部分如下所示:

server {
    listen                  443 ssl;
    ssl                     on;
    server_name             my-server;
    ssl_certificate         {CERTS_FOLDER}my-server.crt;
    ...
通过这种方式,您可以提供一些现成的证书,并使用覆盖它们

server {
    listen                  443 ssl;
    ssl                     on;
    server_name             my-server;
    ssl_certificate         {CERTS_FOLDER}my-server.crt;
    ...