前情提要:

    因公司需求,要在本地搭建测试环境centos,原本在云服务上都没有一点问题的,但是在本地环境自己搭建的时候就是出各种幺蛾子。

 

状况一,当我启动镜像的时候,启动过程报错。提示MySQL jdbc出错,no route host,也找了许多办法在网上,解决的方法是开放端口

我是将3306端口一级6379端口都开放了的。这里有一个小细节就是,与其开放端口,那直接关闭防火墙不就可以了吗?一开始我也是嫌麻烦的,后来我在docker-compose up 的时候会出错,所以只选择了开放端口,上面链接钟那个老哥说的还不错,我试过没有问题。

到这里第一步就解决了,镜像启动没有报错。

windows版docker 报no such host docker no route to host解决_nginx

这个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的网路配置问题,这是重点,本文只是作为一个参考,更详细的还请参考官方文档说明,如有不足请指出一起探讨,感谢