V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NeverBelieveMe
V2EX  ›  程序员

nginx 装进 docker 的方案

  •  
  •   NeverBelieveMe · 2023-09-22 11:12:46 +08:00 · 1667 次点击
    这是一个创建于 423 天前的主题,其中的信息可能已经有所发展或是发生改变。

    nginx 装进 docker 之后,前端项目或者静态文件的配置遇到了问题。 以前的静态项目配置就是配置一下域名和项目文件夹路径。但是现在 nginx 装进了 docker 中,就无法访问到宿主机的路径了。这种情况下,就必须把静态项目的路径挂载的 nginx 的 docker 中。 感觉这种方式很不方便,每次都要修改 compose 的配置,然后重新启动 docker 。 如果不挂载的话,前端项目也要写个 dockerfile 去构造个镜像,就很麻烦。特别是一些非常小的项目。 想知道大佬们都是怎么解决这个问题的。前提是 nginx 必须装在 docker 中。

    Aliencn
        1
    Aliencn  
       2023-09-22 11:15:54 +08:00
    特别小的项目就把静态文件一起都打到 docker 里就行了
    zhhbstudio
        2
    zhhbstudio  
       2023-09-22 11:16:51 +08:00
    以我的经验,打包好的项目和 nginx 应该在一个容器里
    MuXia
        3
    MuXia  
       2023-09-22 11:16:58 +08:00
    将 docker 启动的 nginx 项目存储 html 文件的路径挂载出来,然后每次修改宿主机上对应的挂载目录的内容,然后重启 nginx 容器即可
    wangxin13g
        4
    wangxin13g  
       2023-09-22 11:17:06 +08:00
    开发环境前端直接 node 跑,本地跑个 nginx 转发下开发域名到对应端口就完事
    发布的话前端写个 dockerfile ,用 nginx 当基础镜像,前端 build 之后把对应的编译结果和 nginx 文件 cp 到镜像里然后 run 就完事了
    me1onsoda
        5
    me1onsoda  
       2023-09-22 11:18:43 +08:00
    不理解,路径挂载的方式,为什么每次要修改 compose
    ysc3839
        6
    ysc3839  
       2023-09-22 11:20:41 +08:00 via Android
    都放到一个目录下即可。我的方案是用 Alpine Linux 的 nginx ,Docker 里面挂载/etc/nginx/nginx.conf /etc/nginx/conf /www ,静态页面放/www 里面
    leokun
        7
    leokun  
       2023-09-22 11:20:45 +08:00
    每个项目都有自己的 nginx ,就在那个项目里面维护一个 dockerfile
    itlaohui
        8
    itlaohui  
       2023-09-22 11:23:09 +08:00
    要么把静态文件在 Dockerfile 里就打包进去,要么就在 docker-compose.yml 中里填写宿主机路径映射。

    除了这两种方式,没有别的方法了,嫌每次都要重启的话,那就要看你映射的目录范围,如果映射 html 那个目录的话,那么就可以动态添加更多的网站,docker exec nginx nginx -s reload 就可以不停服务完成更新
    m2276699
        9
    m2276699  
       2023-09-22 11:24:29 +08:00
    我也不理解,为什么每次要修改 compose ?挂载配置目录和 www 目录,只更新目录的文件不就 OK 了吗?多个项目分文件夹也是可以的
    NeverBelieveMe
        10
    NeverBelieveMe  
    OP
       2023-09-22 11:30:24 +08:00
    @me1onsoda @m2276699 就是项目不能够放到 www 目录的情况。
    yinmin
        11
    yinmin  
       2023-09-22 11:39:12 +08:00 via iPhone
    @NeverBelieveMe 你用的挂接方式是 OK 的,就用这个方法,别折腾,习惯就好。
    BeautifulSoap
        12
    BeautifulSoap  
       2023-09-22 11:47:01 +08:00 via Android
    想了会,lz 意思就是本地不同目录放了一堆不同静态网站,然后域名解析到本地,想通过 nginx 根据不同域名访问不同静态网站?

    如果你这些静态网站都在 home 目录的不同地方的话,这情况你直接把 home 目录给 mount 到 nginx 容器里就行了。反正只是本地开发测试,怎么简单怎么来
    yinmin
        13
    yinmin  
       2023-09-22 11:55:05 +08:00
    @NeverBelieveMe 我用 portainer ce 集中管理 docker 的,portainer 里的 stacks 对应 compose 的 yaml 文件,调参数很方便,你可以试试。
    yumusb
        14
    yumusb  
       2023-09-22 12:16:47 +08:00
    挂载目录以后 也不用重启啊。。不知道为啥会需要重启
    wdssmq
        15
    wdssmq  
       2023-09-22 14:13:04 +08:00
    挂载路径里好像是可以用软连接指向实际路径的?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3665 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 04:20 · PVG 12:20 · LAX 20:20 · JFK 23:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.