网站公告

本次更新:没啥更新的

“钱塘江上潮信起,今日方知我是我”

Skip to content

网络 ​

字数: 0 字 时长: 0 分钟

Docker 网络 ​

字数: 0 字 时长: 0 分钟

1. Docker 网络概述 ​

Docker 容器默认运行在相对隔离的网络环境中。

在实际项目中,不同容器之间往往需要相互通信,例如:

text
Java 应用
    ↓
MySQL

Java 应用
    ↓
Redis

如果多个容器需要直接通信,可以将它们加入同一个 Docker 网络。

简单来说:

Docker 网络就是把多个容器加入到同一个“局域网”中,让它们能够互相访问。

例如:

text
Docker Network:app-network

├── mysql
├── redis
└── java-app

加入同一个自定义网络后,容器之间可以直接通过容器名称进行访问。

例如:

text
mysql:3306
redis:6379

这样就不需要依赖可能发生变化的容器 IP。


2. Docker 网络常用命令 ​

Docker 使用 docker network 管理网络。

基本格式:

bash
docker network [COMMAND]

常见命令:

命令作用人话理解示例
docker network ls查看 Docker 网络看现在有哪些网络docker network ls
docker network create创建自定义网络新建一个容器局域网docker network create app-network
docker network inspect查看网络详细信息看哪些容器加入了这个网络docker network inspect app-network
docker network connect将容器加入网络把一个已有容器加入网络docker network connect app-network mysql
docker network disconnect将容器移出网络让容器退出这个网络docker network disconnect app-network mysql
docker network rm删除网络删除不用的网络docker network rm app-network

3. 创建自定义网络 ​

创建一个名为 app-network 的网络:

bash
docker network create app-network

查看网络:

bash
docker network ls

查看详细信息:

bash
docker network inspect app-network

4. 创建容器并加入网络 ​

创建 MySQL 容器,并加入 app-network:

bash
docker run \
    --name mysql \
    --network app-network \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -d \
    mysql:8.0

创建一个 Java 应用容器,并加入相同网络:

bash
docker run \
    --name java-app \
    --network app-network \
    -d \
    javaweb:1.0

此时网络关系为:

text
app-network
     │
     ├── mysql
     │
     └── java-app

因为两个容器处于同一个自定义网络中,所以 java-app 可以直接使用容器名称访问 MySQL:

text
mysql:3306

例如数据库地址可以配置为:

text
jdbc:mysql://mysql:3306/database

而不需要写:

text
jdbc:mysql://172.x.x.x:3306/database

自定义 Docker 网络支持容器名称解析,因此推荐通过容器名访问其他容器,而不是写死容器 IP。


5. 将已有容器加入网络 ​

如果容器已经创建,也可以通过:

bash
docker network connect app-network mysql

将 mysql 容器加入 app-network。

查看网络:

bash
docker network inspect app-network

可以看到当前加入该网络的容器。

如果需要移出网络:

bash
docker network disconnect app-network mysql

6. Docker Compose 与网络 ​

使用 Docker Compose 时,通常不需要手动创建网络。

Docker Compose 默认会为当前项目创建一个网络,并将 Compose 中定义的服务加入这个网络。

例如:

yaml
services:

  mysql:
    image: mysql:8.0

  redis:
    image: redis:7

  web:
    build: .

启动:

bash
docker compose up -d

Docker Compose 会自动形成类似这样的网络:

text
Compose 默认网络

├── mysql
├── redis
└── web

因此 web 服务可以直接通过:

text
mysql:3306
redis:6379

访问其他服务。

这也是为什么 Compose 项目中通常使用:

yaml
url: jdbc:mysql://mysql:3306/database

而不是写死 MySQL 容器的 IP 地址。


7. 小结 ​

Docker 网络最核心的作用就是:

让多个容器加入同一个网络,并通过容器名互相通信。

最常用的几个命令:

bash
# 查看网络
docker network ls

# 创建网络
docker network create app-network

# 查看网络详细信息
docker network inspect app-network

# 将容器加入网络
docker network connect app-network mysql

# 将容器移出网络
docker network disconnect app-network mysql

# 删除网络
docker network rm app-network

创建容器时也可以直接加入指定网络:

bash
docker run \
    --name mysql \
    --network app-network \
    -d \
    mysql:8.0

简单记住:

同一个自定义 Docker 网络中的容器,可以直接通过容器名称互相访问。

Noctiflorous Garden · MIT License