我创建了多模块应用程序,每个模块都是一个 Web 服务实现,并部署在一个 docker 容器中。目前,我正在将容器 8080 端口绑定到 8081-8083 并访问以下每个 WS: 本地主机:8081,本地主机:8082,本地主机:8083。
我想要实现的是在 localhost:8080 下提供所有 3 个容器 例如。本地主机:8080/soap/..., 本地主机:8080/rest/..., 本地主机:8080/graphql/....
Dockerfile(每个模块几乎相同):
FROM centos
RUN yum install -y java
ADD /target/rest_m-0.0.1-SNAPSHOT.jar rest_m.jar
RUN sh -c 'touch /rest_m.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/rest_m.jar"]
这是我的 docker-compose:
version: "3"
services:
database:
image: mysql:5.7
container_name: database
volumes:
- D:/docker_vol/mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: letmein
MYSQL_DATABASE: employeemanager
MYSQL_PASSWORD: letmein
ports:
- "33061:3306"
nginx:
image: nginx:latest
container_name: nginx
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
ports:
- "80:80"
- "443:443"
links:
- rest
- soap
- graphql
depends_on:
- rest
- soap
- graphql
soap:
container_name: soap
build: ./soap_m
environment:
DB_SERVER: database
MYSQL_DB: employeemanager
MYSQL_USER: root
MYSQL_PASSWORD: letmein
ports:
# - "8081:8080"
- "8080"
links:
- database
depends_on:
- database
graphql:
container_name: graphql
build: ./graphql_m
environment:
DB_SERVER: database
MYSQL_DB: employeemanager
MYSQL_USER: root
MYSQL_PASSWORD: letmein
ports:
# - "8082:8080"
- "8080"
links:
- database
depends_on:
- database
rest:
container_name: rest
build: ./rest_m
environment:
DB_SERVER: database
MYSQL_DB: employeemanager
MYSQL_USER: root
MYSQL_PASSWORD: letmein
ports:
# - "8083:8080"
- "8080"
links:
- database
depends_on:
- database
和当前的 nginx.conf:
events {}
http {
server {
listen 80;
server_name localhost;
location /rest/ {
proxy_pass http://rest:8083;
}
location /soap/ {
proxy_pass http://soap:8081;
}
location /graphql/ {
proxy_pass http://graphql:8082;
}
}
}