本文介绍: 笔者在使用docker启动nginx时遇到的坑
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
暴露端口了,本身已经使用了本地网络,所有端口是与宿主机同步,再作端口映射是本机映射到本机,脱了裤子放屁,多此一举如果映射端口了会启动失败的!
原文地址:https://blog.csdn.net/fengxiandada/article/details/130111736
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_51053.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。