容器间的网络
笔者在使用 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