踩坑过程
昨天公司叫我上线一个项目,但是原先的服务器里面已经有nginx,而且里面的项目已经跑起来了。
但是公司要把最新的项目部署到docker里面。
之前我学习的docker只是部署一些同ip访问的项目,因此直接做端口转发就可以了。
可是,这次要用到https服务,所以要用到端口转发,监听80和443。
正如我之前说的服务器本地已经有一个nginx,并且里面的项目也在监听这个端口。
如果使用自定义的bridge网桥,然后转发80端口,那么必然会报错端口被占用。
然后我找了网上各种说法,还问了文心一言:
1、把80端口转发成其他端口就可以,我也不知道那个博主怎么成功的。而且一般这种域名都是设定好的,很难改变,因此这个方法不行
2、iptables转发,这个确实可以,但是我服务器本地的其他项目也全部转发到了那个项目,导致所有域名访问的都是同一个项目,差点把我之前部署的项目干掉,因此,这个也不可以。
后来我思来想去。
我在想,既然容器里的项目可以通过端口转发出来就能够访问到,那我直接在本地的nginx上访问我容器里的项目不久可以了!
好!有了思路马上行动。
解决办法
其实操作起来很简单,把服务器本地的nginx配置,后端转发地址的端口号改成你容器转发出来的端口号就可以了!
创建容器
docker run -d --name pxh-admin -p 8019:8013 --network pxh pxh-admin
修改服务器本地nginx配置
proxy_pass http://localhost:8019/;
这里可以用localhost或者127.0.0.1。
很简单,其他配置都可以写在这个nginx里面。
因此,我们在容器里完全不用在重新创建一个nginx来单独监管我们的服务。