桥接网络
Docker 通过 Namespace 的机制实现了容器的隔离,其中就包括 Network Namespace。因为每个容器都有独立的 Network Namespace,所以不能直接通过端口访问其他容器的服务。但可以创建一个 Network Namespace,然后设置到多个 Docker 容器,这样这些容器就在一个 Namespace 下了,如此就可以直接访问对应端口了。这种就是桥接网络
通过 docker network 来创建:
| docker network create common-network
|
docker run 时通过 --network
指定桥接网络为刚才创建的那个。除了主容器外,其他和主容器通信的容器都不用暴露端口了
| docker run -d --network common-network -v D:/Docker/redis:/data --name redis-container redis
|
容器中的业务代码里的**host**填写需要通信的容器的容器名即可
| TypeOrmModule.forRoot({ type: 'mysql', host: 'mysql-container', port: 3306, username: 'root', password: '123456',
|
docker-compose 中 配置通过 _<font style="color:rgb(37, 41, 51);">networkds</font>_
,或者不配置 _<font style="color:rgb(37, 41, 51);">networkds</font>_
,docker-compose 会生成一个默认的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| version: "3.8" services: nest-app: build: context: ./ dockerfile: ./Dockerfile depends_on: - mysql-container - redis-container ports: - "3000:3000" networks: - common-network mysql-container: image: mysql volumes: - /Users/guang/mysql-data:/var/lib/mysql networks: - common-network redis-container: image: redis volumes: - /Users/guang/aaa:/data networks: - common-network
networks: common-network: driver: bridge
|