我试图使用jwilder / nginx-proxy docker镜像作为另外两个容器的反向代理,其中一个运行tomcat,另一个运行grav。我希望它们代理到不同的子域,这不应该导致冲突。
我想要的是以下内容:
目前,两个容器都使用端口8080,如命令docker ps -a
所示。
以下是我目前的docker-compose.yml:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
tomcat:
image: tomcat:8.5.15-jre8
container_name: tomcat
environment:
- VIRTUAL_HOST=appserver.domain.com
- VIRTUAL_PORT=8080
# ports:
# - "8080:8080"
grav:
image: garywiz/docker-grav
container_name: grav
environment:
- VIRTUAL_HOST=www.domain.com
- VIRTUAL_PORT=80
# ports:
# - "80:8080"
#expose:
# - 8080
# - 80
other:
image: other
container-name: other
environment:
- VIRTUAL_HOST=other.domain.com
- VIRTUAL_PORT=80
有人可以帮忙吗?
更新
我将docker-compose.yml更改为以下内容:
version: "2"
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
- "8080:8080"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
tomcat:
image: tomcat:8.5.15-jre8
container_name: tomcat
environment:
- VIRTUAL_HOST=appserver.domain.com
- VIRTUAL_PORT=8080
grav:
image: garywiz/docker-grav
container_name: grav
environment:
- VIRTUAL_HOST=www.domain.com,domain.com
- VIRTUAL_PORT=8080
两个容器现在似乎都可以通过端口80获得,而不是在“传统”端口8080上可用的tomcat。这是基于我的配置文件的预期行为吗?
杰森
答案 0 :(得分:1)
不确定这是否对您有所帮助,因为它只是一个非常简单的POC,只有几个index.html模拟两个不同的项目。虽然,通过一些努力,你可以让它适合你的情况。诀窍是让另一个运行nginx的容器作为反向代理,可以访问其他容器。这里有代码https://github.com/jlaso/docker-nginx-reverseproxy-domain-name,功能/生产部署分支可能在非本地环境中更有用。
我写了一篇文章深入解释,但是用西班牙文http://developer.joseluislaso.es/2018/02/resolver-por-nombre-de-dominio-en-docker.html。 我从https://www.thepolyglotdeveloper.com/2017/03/nginx-reverse-proxy-containerized-docker-applications/
得到了这个想法 希望能以某种方式帮助你。