使用 docker compose 命令来启动容器, 如果不在 docker-compose.yaml 文件里指定网络, 则会自动创建一个名为 容器名_default 的桥接网络, 这样就导致容器之间无法相互访问
要解决容器间相互访问的问题有如下两个解决方案:
- 把要访问的容器配置写在同一个
docker-compose.yaml配置文件里 - 在
docker-compose.yaml配置文件里指定同一个网络
第一种解决方法:将要访问的容器配置写在同一个 docker-compose.yaml 配置文件里
例如,在一个配置文件里如下内容:
version: '3.9'
services:
prometheus:
image: prom/prometheus
ports:
- '9090:9090'
grafana:
image: grafana/grafana
container_name: grafana
ports:
- 3000:3000在这个配置文件里有两个容器 prometheus 和 grafana , 在这两个容器中都可以用容器名来访问另一个容器, 可以用 ping 命令来测试:
ping prometheus第二种解决方法:在 docker-compose.yaml 配置文件里指定同一个网络
如果不想把两个容器的配置写在同一个配置里,就需要在配置里指定网络。
首先,创建一个自定义桥接网络,网络名为 mynet:
docker network create --driver bridge mynet然后,在配置文件里指定网络:
version: '3.9'
services:
prometheus:
image: prom/prometheus
ports:
- '9090:9090'
networks:
- mynet
networks:
mynet:
name: mynet
external: true
version: '3.9'
services:
grafana:
image: grafana/grafana
container_name: grafana
ports:
- 3000:3000
networks:
- mynet
networks:
mynet:
name: mynet
external: true这里在两个配置文件里都指定了同一个网络:mynet,也可以实现相互访问。
博主真是太厉害了!!!
博主真是太厉害了!!!
想想你的文章写的特别好
不错不错,我喜欢看 https://www.jiwenlaw.com/