docker启动nginx无法正常代理问题解决( [error] 30#30: *6 connect() failed (111: Connection refused) while connect)

docker启动nginx无法正常代理

最近想使用nginx代理二级域名到不同的端口,发现会报错

2023/04/12 08:18:28 [error] 24#24: *8 connect() failed (111: Connection refused) while connecting to upstream, client: 58.34.185.106, server: xxx.xxx.xxx, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:20077/", host: "xxx.xxx.xxx"

我的配置很简单,就是通过域名代理到不同的端口

server {
		listen       80;
		server_name  xxx.com;
		location / {
			proxy_pass http://127.0.0.1:20074;
		}
	}
server {
		listen      80;
		server_name  xxxx.com;
		location / {
			proxy_pass http://127.0.0.1:20077;
		}
	}

其实这是因为使用的docker启动的nginx,docker默认启动的nginx使用的是bridge模式,将端口映射到外面,在容器里面访问localhost是访问不到宿主机的

Docker网络模式配置说明
host模式–net=host容器和宿主机共享Network namespace
bridge模式–net=bridge最为常用的模式(默认为该模式)
none模式–net=none容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等
container模式–net=container:NAME_or_ID容器和另外一个容器共享Network namespace。 kubernetes中的pod就是多个容器共享一个Network namespace

我们只需要改成host模式,共用宿主机的网络即可!

还有就是不建议使用命令启动容器,容器一多根本找不到自己挂载的目录在哪里,建议使用docker-compose

version: "3"
services:
   web:
     container_name: nginx
     image: nginx
     volumes:
       - ./html:/usr/share/nginx/html
       - ./conf/nginx.conf:/etc/nginx/nginx.conf
       - ./conf.d:/etc/nginx/conf.d
       - ./logs:/var/log/nginx
     restart: always
     network_mode: host

注意⚠️:使用host模式后就不要再-p暴露端口了,本身已经使用了本地网络,所有端口是与宿主机同步,再作端口映射是本机映射到本机,脱了裤子放屁,多此一举

如果映射端口了会启动失败的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值