参考:Docker Compose:链接外部容器的几种方式
参考内容中有些许实现不到位的地方,按照测试例子,跑不起来,故参考后进行了一些修改,重新写了下文章记录一下,
有些自己理解的可能不是很到位,大家凑合着看下,有问题欢迎指出,在此先谢过了,(⊙v⊙)。
本文的docker 版本为1.13.1,具体操作如下
创建同一网络
docker network create app_net
# 查看创建的网络
docker network ls
yml配置如下
- mysql
version: '3'
services:
mysql-service:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=root
restart: always
ports:
- "3306:3306"
volumes:
- /docker-service/mysql-5.7/data:/var/lib/mysql
- /docker-service/mysql-5.7/conf:/etc/mysql/conf.d
networks:
- custom_net
networks:
custom_net:
external:
name: app_net
- app-tomcat
version: '3'
services:
app-service:
image: tomcat:9.0
environment:
TZ: Asia/Shanghai
restart: always
ports:
- 8080:8080
volumes:
- /docker-service/app-tomcat-9.0/webapps:/usr/local/tomcat/webapps
- /docker-service/app-tomcat-9.0/logs:/usr/local/tomcat/logs
networks:
- custom_net
networks:
custom_net:
external:
name: app_net
- nginx
version: '3'
services:
nginx-service:
image: nginx:1.14
restart: always
ports:
- "80:80"
volumes:
- /docker-service/nginx-1.14/conf:/etc/nginx/conf.d
- /docker-service/nginx-1.14/logs:/wwwlogs
- /docker-service/nginx-1.14/www:/www
networks:
- custom_net
networks:
custom_net:
external:
name: app_net
- nginx 挂载后的配置文件,原容器中有一个default.conf,监听的事nginx的启动页,这里映射后,把default.conf覆盖了,故需/docker-service/nginx-1.14/conf下创建custom.conf重启容器
#api接口转发custom.conf
server {
server_name xx.xxxx.com
underscores_in_headers on;
index index.html;
location / {
add_header 'Access-Control-Allow-Origin' '*';
proxy_pass http://app-service:8080/;
#try_files $uri $uri/ /index.html;
}
}
解析下yml配置及相关说明
所以上述docker-compose.yml中声明服务,nginx 中proxy.conf配置的app-service:8080,相当于通过tomcat的容器ip,
调用tomcat的8080端口,简单的将yml中的服务名称,理解为,加入同一网络后的"host"即可,这样理解起来更方便直观一点,
如tomcat中调用mysql服务,spring配置可以用
<property name="url" value="jdbc:mysql://mysql-service:3306/finance?useUnicode=true&characterEncoding=UTF-8"/>。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。