- 简要说明:**
nginx运行在docker上,如何配置nginx,使其将调用转发到主机。
- 详细说明:**
我们有一个web应用程序,它与几个后端(比如rest1、rest2和rest3)通信,我们负责rest1
。
让我们考虑一下我在我的PC上手动启动rest1
并在2345端口上运行,我希望nginx(运行在docker中)将所有对rest1
的调用重定向到我自己正在运行的示例(注意,示例运行在主机上,而不是任何容器上,也不是在docker中),并将rest2
和rest3
重定向到其他docker节点或其他服务器(谁在乎呢)。
- 我正在寻找的是:**
docker-compose.yml
配置(如果需要)。- nginx配置。
先谢了。
5条答案
按热度按时间t8e9dugd1#
如下所示配置nginx(确保替换Docker主机的IP)并将其保存为
default.conf
:现在把容器拿出来:
sy5wg1nm2#
如果您正在使用Docker合成文件版本3,则根本不需要为
docker-compose.yml
文件进行任何特殊配置,只需使用特殊DNS名称host.docker.internal
即可访问主机服务,如以下nginx.conf
示例所示:kg7wmglp3#
使用
network_mode: host
,这将把你的nginx示例绑定到主机的网络接口。这可能会在运行多个nginx容器时导致冲突:每个暴露的端口被绑定到主机的接口。我为每个服务运行了更多的nginx示例,为了保持nginx配置的简单性,避免将每个nginx绑定到主机,使用容器结构:
dockerhost
-具有network_mode: host
的虚拟容器proxy
-用作主机服务的代理的nginx容器,将
dockerhost
链接到proxy
,这将在proxy
容器中添加一个/etc/hosts
条目-我们可以使用"dockerhost"作为nginx配置中的主机名。docker-compose.yaml
default.conf
这个方法允许我们为我的服务器上运行的每一个服务自动生成let's encrtypt证书。如果有兴趣,我可以发布一个解决方案的要点。
50few1ms4#
服务器{收听80;
服务器名称本地主机;
}
}
Docker暴露的主机地址在Mac OS中为host. docker. internal
kxkpmulp5#
有几件事你必须记住:
1.默认情况下,Dockercompose(从版本3开始)使用服务名作为容器间网络的主机名
1.我强烈建议将default.conf直接挂载到您的docker-compose.yml中。
1.最后,你必须对接你的后端,以利用docker内部网络。
我在一个全栈项目中使用nginx和docker-compose的示例repo:https://gitlab.com/datails/api.
以下示例具有一些先决条件:
示例
default.conf
:示例
docker-compose.yml
:然后,确保后端已经对接并被称为(在本例中)
backend
作为服务,前端(如果需要)被称为frontend作为服务。这是一个最基本的入门示例。希望这对未来的开发人员有帮助。