使用 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/