从业务容器访问Vault容器遇连接拒绝问题求助
问题分析与解决方案
核心问题
你业务容器里的Vault访问地址配置错了——你写的是127.0.0.1:8202,但容器的127.0.0.1是它自己的本地回环,不是宿主机,更不是Vault容器。加上你用了自定义网桥,容器之间应该通过容器名称+内部端口通信,而不是宿主机的映射端口。
修复步骤
1. 修改业务容器的Vault配置
把业务代码/配置里的Vault地址改成dev-vault:8200(dev-vault是你给Vault容器起的名字,Docker自定义网桥会自动解析这个名称到对应容器的IP;8200是Vault容器的内部服务端口,不是宿主机映射的8202)。
2. 重新启动容器(用自定义网桥)
保持你之前的启动命令不变,只要配置改对就行:
- 创建网桥(如果还没创建):
docker network create ayush_bridge - 启动Vault容器:
docker run --cap-add=IPC_LOCK -d --name=dev-vault --network=ayush_bridge -p 127.0.0.1:8202:8200 -v C:\DockerVault\data:/vault/data -e VAULT_DEV_ROOT_TOKEN_ID=XXXXXXXXXXXXXXXXXX -e VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200 hashicorp/vault server -dev - 启动业务容器:
docker run --network=ayush_bridge -p 8139:8139 -d --name=project_asyush ayush
关于第三种运行方式的解释
你最后那种方式能连通Vault,是因为两个容器都用了Docker默认的bridge网络,而且业务容器的配置可能无意中用了宿主机的IP(或者你的环境把127.0.0.1映射到了宿主机),但这种方式不规范。
至于“无法访问业务容器端点”,是因为你把业务容器的端口绑定到了宿主机的回环地址127.0.0.1:8139:8139——这个配置只有宿主机能访问业务容器,外部设备连不上。改成-p 8139:8139(等价于-p 0.0.0.0:8139:8139)就能让外部访问了。
额外提示
- Docker的
--link特性已经废弃,不要再用,统一使用自定义网桥即可。 - 自定义网桥比默认bridge网络更安全,支持容器名称自动解析,不用手动管理容器IP。
内容的提问来源于stack exchange,提问作者Jyoti Prakash Mallick
相关产品推荐
相关产品推荐

