Docker之间网络互访
date
May 16, 2022
slug
tip-docker-network-access
status
Published
summary
小技巧
tags
tip
type
Post
URL
Problem & Summary常用网络命令Solution通过docker0通过 “--link 被访问docker”通过 network_mode: “host”!!! 推荐,通过加入同一个自建的networkScreenshotsDocker compose无法使用默认的bridge网络
Problem & Summary
- 默认是每个docker都单独建立自己的bridge网络
- docker network ls
- 安装Docker时,它会自动创建三个网络,host、none、bridge
- 默认的docker0 对应bridge (名称是bridge), 172.17.0.1
常用网络命令
docker network inspect <network-name>
docker network ls
Solution
通过docker0
- 在日常的生产环境中,docker0已经很少被使用了,因为它不支持使用容器服务名称进行通信,推荐使用自定义网络
- 但和docker-compose自己内建的网络是不通的
通过 “--link 被访问docker”
- 在日常的生产环境中,
--link
也已经不被推荐使用了,不够灵活强大,推荐使用自定义网络。
# 可以访问shared_mariadb,以db作为host_alias
docker run -d \
--name typecho-server \
--link shared_mariadb:db \
-v $(pwd)/app/usr:/app/usr \
-p 18310:80 \
-e TYPECHO_SITE_URL=https://typecho.nine.im \
-e TZ=Asia/Hong_Kong \
-e MEMORY_LIMIT=512M \
-e MAX_POST_BODY=50M \
joyqi/typecho:nightly-php7.4-apache
通过 network_mode: “host”
- 可以访问host当中的任何ip
- 127.0.0.1 针对host,而非docker
!!! 推荐,通过加入同一个自建的network
- 建立(默认bridge,类似 -d bridge)
docker network create app_net
- app_net网络里面的容器相互之间是可以联通的,而且可以使用容器服务名进行联通,实现了
--link
的作用,但是和其它网络的容器是不能联通的,网段不同默认都是不通的
- 新docker第一次运行
docker run -it --name <容器名> --network <bridge> --network-alias <网络别名> <镜像名>
- docker已经运行,后置加入网络,多分配地址
docker network connect networkName containerName
- composer 当中 声明+使用
networks:
- default
- app_net
....
networks:
app_net:
external: true
# 如果只是改default,那就*只要*这段在最后
networks:
default:
name: npm_nginx_proxy_manager-network
external: true