如何使用卷路径docker映射所有包含的文件夹



我刚开始使用Docker,所以请告诉我是否应该做一些完全不同的事情,但是这里是…

我想在一个nginx容器中创建一个卷,它将所有启用站点的配置文件映射到容器上的位置。问题是,这些文件分散在多个文件夹中,这些文件夹可以随机命名。但是等等!我可以肯定地告诉你,.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

我有点明白错误,但我找不到任何东西告诉我如何完成我最终想要的。

你肯定不能这么做。

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

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

你做错的是:

    httpd服务器的配置保存在站点的数据/配置结构中,或者至少在中嵌套。
  • 您正在尝试使用静态+嵌套文件夹配置动态数量的"服务"站点。您混淆了"配置"和数据。尝试将您的配置放入consul/etcd/zookeeper中,并使用tiller (confd/consul-template)
  • 生成配置。

如果你想强制,你可以:

方式)在nginx中挂载包含sites文件夹的卷,只读(不管这个卷怎么叫)

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

您还需要考虑删除,因此为符号链接选择一个好的名称空间,如mysite.automated.conf,并且在入口点创建符号链接之前,运行rm /etc/nginx/sites-enabled/*automated.conf以清除可能过时/已删除的符号链接。你也可以用更新的方式来做,但那是为了更复杂的…

b)

如果可以的话,一般来说,改变网站的结构,把所有的"vhosts"放到一个文件夹里,比如你要有

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

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

最新更新