前情提要:
因公司需求,要在本地搭建测试环境centos,原本在云服务上都没有一点问题的,但是在本地环境自己搭建的时候就是出各种幺蛾子。
状况一,当我启动镜像的时候,启动过程报错。提示MySQL jdbc出错,no route host,也找了许多办法在网上,解决的方法是开放端口,参考文档https://blog.csdn.net/zx110503/article/details/78787483
我是将3306端口一级6379端口都开放了的。这里有一个小细节就是,与其开放端口,那直接关闭防火墙不就可以了吗?一开始我也是嫌麻烦的,后来我在docker-compose up 的时候会出错,所以只选择了开放端口,上面链接钟那个老哥说的还不错,我试过没有问题。
到这里第一步就解决了,镜像启动没有报错。
这个192.168.0.32是我宿主机的IP,这里我本想用docker inspect mysql 查询到的子IP来代替的,但是与后文中的docker-compose会有冲突,这里有可能会产生两个子域网,两者不能互通所以选用这个。
状况二:即使解决了第一步,接下来还会遇到一些问题,就比如nginx在路由分配的问题上。如果这里没有配置好的话,极有可能会发生404错误。
我是这样配置的
version: '3'
services:
nginx:
container_name: mynginx
image: nginx
restart: always
ports:
- 80:80
networks:
myset:
ipv4_address: 172.18.0.2
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
auth-server:
restart: always
container_name: auth-server
image: auth-server
volumes:
- ./auth:/opt/project/auth
ports:
- 8081:8081
networks:
myset:
ipv4_address: 172.18.0.4
depends_on:
- nginx
resource-server:
restart: always
container_name: resource-server
image: resource-server
volumes:
- ./resource:/opt/project/resource
ports:
- 8083:8083
networks:
myset:
ipv4_address: 172.18.0.3
depends_on:
- nginx
#注意空格,对齐方式,以下是这定义子网IP
networks:
myset:
ipam:
config:
- subnet: 172.18.0.0/16
有了这个docker-compose.yaml之后,我就可以自动生成我想要的镜像以及容器了。
到这里并不能结束,还有nginx的配置
upstream auth{
server 172.18.0.4:8081;
}
upstream resource{
server 172.18.0.3:8083;
}
server {
listen 80;
server_name 192.168.0.32;
#charset koi8-r;
#access_log logs/host.access.log main;
location /user/{
limit_req zone=one burst=5;
proxy_pass http://auth;
}
location /device/{
limit_req zone=one burst=5;
}
红色是重点,因为在那个yaml的文件中,我是将nginx,auth,resource一起构建启动的,然而MySQL与redis并不是同时启动的,所以才有这样的区分,同一个子域的我都是用子网IP来代替,不在一个子网就使用宿主机IP,这样做。
总的来说,这其实可以归类为一个问题,那就是docker的网路配置问题,这是重点,本文只是作为一个参考,更详细的还请参考官方文档说明,如有不足请指出一起探讨,感谢