我是Docker的新手,所以让我知道我是否应该做一些完全不同的事情,但这里就是......
我想在nginx容器中创建一个卷,该容器将所有启用站点的配置文件映射到容器上的位置。问题是,这些文件分散在多个文件夹中,可以随机命名。可是等等!我可以肯定地告诉你,<input class="form-control" type="text" name="@(Html.NameFor(m => Model))"
@Html.Raw(string.Join(" ",
validationAttributes.
Select(x => x.Key.ToString() + "=\"" + x.Value + "\"")))
value="@t.Value">
文件将始终位于特定文件夹中,只有1级深度(因为这就是我更喜欢布局的方式)。这是解释我的意思的基本布局:
.conf
我在声明nginx的卷时试图这样做:
- images/
- nginx/
- docker-compose.yml
- sites/
- site_a/
- vhost/
site_a.conf
- site_b/
- vhost/
site_b.conf
然而我收到以下错误:
- ../sites/*/vhost/:/etc/nginx/sites-enabled
我得到了错误,但我无法找到任何告诉我如何实现我最终想要的东西。任何帮助将不胜感激。
答案 0 :(得分:2)
很确定你不能这样做。
您可以做的是 symlink 将所有.conf文件复制到主机上的单个目录中,并将其用作卷装入点。或者只是挂载sites/
根目录。
答案 1 :(得分:1)
这是一个概念性的问题,你的概念非常脆弱,最有可能引发问题。
你做错了是:
如果你强迫它,你可以:
方式a) 将包含sites文件夹的卷挂载到nginx中,只读(但是调用此卷)
然后你在nginx容器中运行一个入口点脚本,一些find
表达式来遍历你的网站&#34;文件夹,找到任何站点,使用vhost文件夹并从那里创建一个符号链接到/ etc / nginx / sites-enabled
您还需要考虑删除,因此为符号链接选择一个好的命名空间,例如mysite.automated.conf
,并且在入口点创建符号链接之前,运行rm /etc/nginx/sites-enabled/*automated.conf
以刷新可能过时/删除的符号链接。您也可以使用更新方式,但这更复杂..
方式b)
如果可以的话,一般来说,改变网站的结构,提取所有&#34; vhosts&#34;在一个文件夹中,假设你有
sites/vhosts/*.sites.conf
sites/data/siteA/
sites/data/siteA/
然后将卷只读在nginx和symlink sites / vhosts上挂载到/ etc / nginx / site-enabled(文件夹本身)