我有一个docker-compose设置。不同的容器相互交流。此外,设置应该允许动态运行容器。现在,我试图通过nginx反向代理服务器公开一些。这对所有预先拥有已知主机的容器都很好。但是,我想用前缀containeraaa-动态代理所有容器,如下所示。
docker-compose.yml
version: '3'
services:
container-api:
build: ./api
containerzzz
build: ./zzz
# the following can change dynamically:
containeraaa-x:
image: nginx:alpine
volumes:
- ./x:/usr/share/nginx/html:ro
containeraaa-y:
image: nginx:alpine
volumes:
- ./y:/usr/share/nginx/html:ro
containeraaa-z:
image: nginx:alpine
volumes:
- ./z:/usr/share/nginx/html:ro
# reverse-proxy:
reverse-proxy:
ports:
- 80:80
image: nginx:alpine
volumes:
- ./reverse-proxy/nginx.conf:/etc/nginx/nginx.conf:ronginx.conf
http {
server {
listen 80;
location ~ ^/aaa/(?<fwd_path>.*)$ {
proxy_pass http://containeraaa-$fwd_path; # error
}
location /aaa {
proxy_pass http://container-api:8080/api/; # resolves correctly
}
location / {
proxy_pass http://containerzzz/; # resolves correctly
}
}
[…]即使可以从反向代理容器中访问http://containeraaa-x;请求/aaa/x也会导致错误:
no resolver defined to resolve containeraaa-x.如果我加上
resolver 127.0.0.11它试图访问/usr/share/nginx/html/aaa/x。
将/aaa/x解析为http://containeraaa-x的正确方法是什么,还是这根本不可能?http://containerzzz/为什么和如何工作,但http://containeraaa-*却不起作用?
发布于 2018-07-11 12:09:11
您应该使用特雷菲克,它是“云本机边缘路由器”。要使用它,在您的坞内启动traefik容器-编写安装程序,并将标签添加到您希望通过traefik公开的容器中。
要启动traefik容器,您应该这样做:
traefik:
image: traefik
command: -c /dev/null --web --docker --docker.domain=basedomain.com
ports:
- 80:80
- 8080
volumes:
- /var/run/docker.sock:/var/run/docker.sock并将服务放在反向代理后面:
the_app:
depends_on:
- traefik
ports:
- 80
labels:
- traefik.frontend.rule=Host:the_app.domain
- traefik.port=80你不想再暴露你的服务了。
https://stackoverflow.com/questions/51284363
复制相似问题