Docker之间网络互访

date
May 16, 2022
slug
tip-docker-network-access
status
Published
summary
小技巧
tags
tip
type
Post
URL

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自己内建的网络是不通的
    • notion image

通过 “--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
notion image

Screenshots

Docker compose无法使用默认的bridge网络

notion image
 

© Ying Bun 2021 - 2024