如何使用卷path泊坞窗映射所有包含的文件夹

我是新来的Docker,所以让我知道我是否应该做一些完全不同的事情,但是这里..

我想在一个nginx容器中创build一个容器,它将所有启用站点的configuration文件映射到容器上的位置。 值得注意的是,这些文件分散在多个可随机命名的文件夹中。 可是等等! 我可以告诉你一定的.conf文件将永远只在一个特定的文件夹只有1级深(因为这是我喜欢的布局)。 这是一个基本的布局,解释我的意思:

 - images/ - nginx/ - docker-compose.yml - sites/ - site_a/ - vhost/ site_a.conf - site_b/ - vhost/ site_b.conf 

在为nginx声明卷时,我试图做到这一点:

 - ../sites/*/vhost/:/etc/nginx/sites-enabled 

但是我得到以下错误:

 ERROR: for nginx Cannot start service nginx: mkdir /c/Users/Yates/Documents/docker/sites/*: protocol error 

我得到的错误,但我找不到任何告诉我如何实现我最终想要的东西。 任何帮助将非常感激。

这是一个概念性问题,你的概念非常脆弱,最有可能导致问题。

你做错了什么是:

  • httpd服务器的configuration保存在site data / configuration结构中,或者至less嵌套在里面
  • 您正尝试使用静态+嵌套文件夹configurationdynamic数量的“服务”网站。 你在混合“configuration”和数据。 尝试把你的configuration到像领事/ etcd / zookeeper和生成configurationusint分蘖(confd / consul-template)

如果你强迫它,你可以:

方法a)挂载nginx中保存站点文件夹的卷,只读(但是这个卷被调用)

然后在nginx容器中运行入口点脚本, findexpression式遍历你的“站点”文件夹,find任何站点,使用vhost文件夹,并从那里创build一个符号链接到/ etc / nginx / sites-enabled

您还需要考虑删除操作,所以为符号链接select一个好的命名空间,例如mysite.automated.conf并在入口点创build符号链接之前,运行rm /etc/nginx/sites-enabled/*automated.conf来刷新可能已经过时/删除了。 你也可以做更新的方式,但那更复杂..

方式b)

如果可以的话,一般改变网站的结构,把所有的“虚拟主机”都放到一个文件夹中,可以说你会有

 sites/vhosts/*.sites.conf sites/data/siteA/ sites/data/siteA/ 

然后在nginx和symlink sites / vhosts上将卷只读挂载到/ etc / nginx / site-enabled(文件夹本身)

很确定你不能这样做。

你可以做的是符号链接将所有.conf文件复制到主机上的一个目录中,并将其用作卷挂接点。 或者只是挂载sites/根目录。