容器间的网络

笔者在使用 Docker 创建 XXL-Job 时无法连接之前已经创建的 MySQL 容器。查询相关资料才发现:

  • Docker 容器默认被分配在 bridge 网络下

  • bridge 网络下的容器之间无法使用容器名称相互访问,需要指定具体的 IP 地址,但是 IP 是动态分配的,每次重启容器可能会发生变化。

解决办法也很简单,首先创建一个自定义网络:

sudo docker network create tj_xxl-net

将 MySQL 容器加入自定义网络:

sudo docker network connect tj_xxl-net tj_mysql57

重新启动 XXL-Job 容器,并指定自定义网络:

sudo docker run -d --name tj_xxl-job-admin \
  --network tj_xxl-net \
  -p 4080:8080 \
  -e PARAMS="--spring.datasource.url=jdbc:mysql://tj_mysql57:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai \
             --spring.datasource.username=root \
             --spring.datasource.password=tjmysql57" \
  xuxueli/xxl-job-admin:2.4.1

因为在同一网络下,容器名(tj_mysql57)就相当于其 IP 地址。注意此时的端口是容器内部的端口3306,并不是映射在宿主机上的端口。

其他相关命令

查看所有的网络:

sudo docker network ls

删除某个网络:

sudo docker network rm <网络名称或ID>

查看某个网络下的容器列表:

sudo docker network inspect tj_xxl-net