docker中网络配置

在项目通过docker上线的时候遇到了点坑,简单记录下吧,也避免后来的人采坑;docker中的网络有几种

1.bridge

桥接的方式,这种是默认的网络连接方式,也是最常用的网络连接方式,桥接网络可以让你的应用运行在一个隔离的网络中,网络中的容器可以互相访问,一般我们将应用的端口映射出去,以便主机外的网络通过这个端口进行访问,比如容器中应用的端口是8080,映射到主机的端口是9090,那么主机以外的网络通过ip:9090可以访问容器中的应用;而容器之间是通过容器的端口进行访问,比如你又起了一个docker容器叫mysql,端口是3306,那么你应用里面的数据库的连接地址是mysql:3306;注意这种情况下,是直接可以通过容器的名称进行访问的,不需要地址配置成localhost:3306;docker-compose中可以这么配置;

environment:
            # - _JAVA_OPTIONS=-Xmx512m -Xms256m
            - SPRING_PROFILES_ACTIVE=prod,swagger
            - SPRING_DATASOURCE_URL=jdbc:mysql://aiops-mysql:3306/aiops?useUnicode=true&characterEncoding=utf8&useSSL=false
            - JHIPSTER_SLEEP=10 # gives time for the database to boot before the application
        ports:
            - 9999:8080

2.host

共享主机的网络,这种情况下,容器直接使用主机的网络,端口映射无效了;这种情况下,容器失去了隔离性;应用的端口就是主机网络的端口,比如容器中应用的端口是8080,那么直接访问本地的8080就可以访问容器中的应用了;而且这种情况下无法通过容器的名称来访问了,只能通过ip地址

environment:
            # - _JAVA_OPTIONS=-Xmx512m -Xms256m
            - SPRING_PROFILES_ACTIVE=prod,swagger
            - SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/aiops?useUnicode=true&characterEncoding=utf8&useSSL=false
            - SPRING_DATASOURCE_USERNAME=root

 

3.macvlan

这种方式允许指定一个mac地址,把它映射为一个网络中的物理地址;

可以通过docker network ls查看docker中所有的网络;默认我们的应用会使用“appName_default”这个网络;

 

在实际项目中遇到的问题是,服务器上把docker的桥接方式删除外网访问的权限,导致无法访问外网,所以考虑使用host的模式,在docker-compose中可以直接使用这种方式;

然后是mysql容器,两种情况,一种情况是如果mysql的3306在主机上已经被占用,比如服务器上已经安装了一个mysql,这种情况mysql继续使用bridge模式的,然后app中连接的时候使用localhost,如果没有被占用,也可以直接使用host模式,灵活选择;

总结:默认的情况下,docker应用中的网络情况我们是不用做特殊处理的,如果有特殊情况,可以试试host模式;不同的容器可以在不同的网络中,连接方式也有所区别;

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值