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

时间:2016-08-23 14:02:50

标签: docker docker-compose

我是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

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

2 个答案:

答案 0 :(得分:2)

很确定你不能这样做。

您可以做的是 symlink 将所有.conf文件复制到主机上的单个目录中,并将其用作卷装入点。或者只是挂载sites/根目录。

答案 1 :(得分:1)

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

你做错了是:

  • httpd服务器的配置保存在站点数据/配置结构中,或者至少嵌套在
  • 您正在尝试配置动态数量的服务&#39;使用静态+嵌套文件夹的网站。你正在混淆&#34;配置&#34;和数据。尝试将您的配置置于consul / etcd / zookeeper之类,并生成配置usint分蘖(confd / consul-template)

如果你强迫它,你可以:

方式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(文件夹本身)