我正在使用Docker组合文件来创建nginx和tomcat容器。nginx将被用作反向代理,因此它将访问tomcat。我使用两个单独的contaienrs使用azure容器实例成功地做到了这一点。你点击了nginx的URL,然后被重定向到tomcat securley,因为nginx有HTTPS和证书。在那之前一切都没问题。但问题是,如果你单独访问,通过http yo的tomcat Ip也可以访问容器,这是不安全的。我只想让nginx访问tomcat。如何才能做到这一点?我现在正在尝试使用docker compose,我知道容器将使用相同的网络并可以相互连接,但是我如何才能实现nginx连接到Tomcat,tomcat只能通过https上的nginx重定向访问,而tomcat不能被单独的http访问。这就是我拥有的YML,但是我不知道如何管理端口来实现我想要的。这个是可能的吗?
version: '3.1'
services:
tomcat:
build:
context: ./tomcat
dockerfile: Dockerfile
container_name: tomcat8
image: tomcat:search-api
ports:
- "8080:8080"
nginx:
build:
context: ./nginx
dockerfile: Dockerfile
container_name: nginx
image: nginx:searchapi
depends_on:
- tomcat
ports:
- "80:80"
- "443:443"发布于 2018-08-29 00:09:23
通过使用docker-compose中的ports选项,您可以在外部公开该端口。如果您从tomcat中删除了ports选项,它应该仍然有效,因为容器应该只在内部为docker网络公开端口8080。
发布于 2018-08-29 00:40:39
只删除tomcat服务中您的docker-compose文件中暴露的端口,反向代理将使用您的自定义nginx.conf与tomcat容器的容器链接和内部端口一起工作于docker的内部网络,这里我附上一个示例:
version: '3.1'
services:
tomcat:
# build:
# context: ./tomcat
# dockerfile: Dockerfile
container_name: tomcat8
image: tomcat:search-api
nginx:
build:
context: ./nginx
dockerfile: Dockerfile
container_name: nginx
image: nginx:searchapi
links:
- "tomcat"
volumes:
- ./proxyConf:/etc/nginx/conf.d
depends_on:
- tomcat
ports:
- "80:80"
- "443:443"proxyConf/default.conf文件:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://tomcat:8080;
}
}在代理传递中,我添加了tomcat的docker-compose链接和tomcat容器的内部端口。
这是我的目录树:
C:.
│ docker-compose.yml
│
├───nginx
│ Dockerfile
│
├───proxyConf
│ default.conf
│
└───tomcat
Dockerfilehttps://stackoverflow.com/questions/52062042
复制相似问题