假设我有三个带nginx的docker容器。它们的暴露端口分别映射到8080,8181和8282。我想在8080上配置它代理/ example01和/ example02到其他两个应用程序的服务器。这是我的配置文件:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html/;
index index.html index.htm;
}
location /example01 {
proxy_pass http://localhost:8181/;
}
location /example02 {
proxy_pass http://localhost:8282/;
}
}
因此,如果我运行容器,则可以访问每个应用程序(http://localhost:8080,http://localhost:8181和http://localhost:8282)。
现在,我真的不明白为什么http://localhost:8080/example01和http://localhost:8080/example02没有正确重定向。相反,我得到502错误的网关错误。它与我的暴露端口和VIRTUAL_PORT有关吗?
提前致谢。
答案 0 :(得分:1)
这是因为容器网络范围。这些容器的localhost
分别位于每个容器内 - 并且这不是您的端口映射到的位置。而是做:
$ ifconfig
在您的主机上找到您的本地IP地址并代理到主机的流量 - 这些端口已映射。
CONF:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html/;
index index.html index.htm;
}
location /example01 {
proxy_pass http://192.168.1.2:8181/;
}
location /example02 {
proxy_pass http://192.168.1.2:8282/;
}
}
其中192.168.1.2
是您自己的计算机本地IP地址。
另一种方法是链接这些容器而不是通过localhost链接 - 但是您在链接定义中提供的别名。如果你选择这种方法,我可以详细说明。
- 使用关联方法进行编辑 -
为了关联您的服务,您需要使用泊坞窗工具docker-compose
。假设你熟悉它是什么(底部的文档引用),你可以写一个这样的撰写文件:
first-nginx:
build: first-nginx/
ports:
- 8080:80
links:
- second-nginx
- third-nginx
second-nginx:
build: second-nginx/
ports:
- 8081:80
third-nginx:
build: third-nginx/
ports:
- 8082:80
放在项目的根目录中,如下所示:
root
- first-nginx
+ nginx.conf
+ Dockerfile
+ some-other.files
- second-nginx
+ some.files
+ another-nginx.conf
+ Dockerfile
- third-nginx
+ some-nginx.conf
+ Dockerfile
+ docker-compose.yml
你要配置" main" nginx如此使用创建的链接:
CONF:
server {
listen 80;
location / {
root /usr/share/nginx/html/;
index index.html index.htm;
}
location /example01 {
proxy_pass http://second-nginx/;
}
location /example02 {
proxy_pass http://third-nginx/;
}
}
请务必询问是否有任何不清楚的地方。