Docker Compose:如何从应用容器访问Redis与MySQL独立容器?
连接容器化Redis/MySQL的实用方案
推荐:用Docker自定义网络(无需手动获取IP)
Docker默认的bridge网络不支持容器名DNS解析,自定义网络是更可靠的方式:
- 创建专属网络:
docker network create app-shared-network - 启动Redis/MySQL时加入该网络(指定容器名):
- Redis:
docker run -d --name redis-node --network app-shared-network redis - MySQL(记得替换密码):
docker run -d --name mysql-node --network app-shared-network -e MYSQL_ROOT_PASSWORD=your_secure_pass mysql
- Redis:
- 启动应用容器时同样加入该网络:
docker run -d --name my-app --network app-shared-network your-app-image - 应用内直接用容器名作为连接地址:
- Redis:
redis://redis-node:6379 - MySQL:
mysql://root:your_secure_pass@mysql-node:3306
自定义网络的DNS解析由Docker自动维护,容器重启IP变化也不影响连接,比硬编码IP稳定得多。
- Redis:
备选:获取容器IP地址(不推荐,IP可能变动)
如果必须使用IP,可用以下两种方式:
- 用
docker inspect直接查询:- 查询Redis IP:
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-node - 查询MySQL IP,只需把命令中的
redis-node换成你的MySQL容器名即可。
- 查询Redis IP:
- 进入应用容器后查询:
先进入应用容器:
然后用docker exec -it my-app /bin/bashnslookup redis-node或ping redis-node(需在同一网络)获取IP,或用ip a查看容器自身网络信息。
注意事项
- 同一自定义网络内的容器无需使用
-p参数暴露端口,仅当需要从宿主机外部访问时才需发布端口。 - MySQL启动必须设置
MYSQL_ROOT_PASSWORD等必要环境变量,否则容器会启动失败。
内容的提问来源于stack exchange,提问作者realtebo
相关产品推荐
相关产品推荐

