Docker学习笔记:docker compose 中难缠的网络问题
越来越多的开发者被带到Docker的使用中,至少我的所有开发环境都是Docker的,Github直达。本人习惯用 Docker compose 来管理,在各种各样的容器之间,网络问题时不时的就蹦出来,现我就过程中遇到的问题做出自己的总结。
同一个 docker-compose 文件中的容器如何互联?
在整理开发环境时,我习惯性的把php和nginx放在一起,方便启动时能够同时启动。所以会把 nginx 和 php 放在同一个 docker-compose 中。那么如何保证 nginx 能转发到 php 呢?
links
version: "3"services: nginx: image: nginx:1.15 links: - "php7cache" php7cache: build: .
这样nginx和php就能简单的通信了。当然,我们的php不会是独立的,一般还会用到mysql,但是又不是必要的,所以我又单独启动了一个mysql容器。独立的mysql容器,独立的docker-compose文件。那么这时候又要怎么连接呢?
不同 docker-compose 文件中的容器如何互联?
external_links
external_links是连接外部网络的方式,这种方案来源于网上,如下:
... # other ... php7cache: build: . networks: - default - app_net external_links: - redis - mysqlnetworks: app_net: # 定义了一个 app_net 的网络 external: true # 并标识为外部网络
networks
在使用external_links这个过程中我意识的,这生效的极有可能不是external_links,而是在networks服务生效了,于是做了尝试,发现真的可以,我的了解是 app_net 其实是重新定义了一个网络,而后在容器的net_works参数上指定加入了 app_net 中。
version: "3"services: flume: image: probablyfine/flume networks: - default - kafka_defaultnetworks: kafka_default: external: true
细心的同学可能已经发现了,在上面的代码中我并没有再使用app_net,而是直接使用了kafka_default。为什么?其实,当使用 “docker network ls” 命令时,我们会发现在当指定 app_net 时,列表中会包含 app_net 网络,同时,也会有各种容器的 default 网络,如:kafka_default。为了偷懒,我就直接使用了 kafka_default。
extra_hosts
最近,又有一个需求,我的docker需要使用与宿主机同一网络的其它服务。尝试很多方法,改hosts、创立新网络,发现都无法处理。后来才发现还有extra_hosts参数,尝试了一下,发现真的可行。
version: "3"services: flume_events: image: probablyfine/flume container_name: flume_events environment: FLUME_AGENT_NAME: agent extra_hosts: - "test-1:10.3.8.49"
指定extra_hosts后,在宿主机上修改host。而后在flume的配置文件中指定kafka的链接为 test-1:9092。
转发请注明出处,来自三岁于辛的博客!原文链接
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Docker学习笔记:docker compose 中难缠的网络问题