Docker配置EXPOSE 8200下容器内访问Vault端口连接被拒问题
实际问题场景
初始配置
Dockerfile 内容
# 声明暴露8200端口 EXPOSE 8200 # 指定容器启动执行脚本 ENTRYPOINT ["helloworld/run.sh"]
构建与运行命令
# 构建镜像 docker build --tag my-service . # 以host网络模式运行容器 docker run my-service --network="host"
容器启动脚本 run.sh 核心片段
cd helloworld/ export VAULT_TOKEN='token123' export VAULT_ADDR='http://127.0.0.1:8200' export TF_VAR_issuer_url='http://localhost:8200' # 以后台dev模式启动Vault服务并忽略输出 vault server -dev -dev-root-token-id=${VAULT_TOKEN} # &>/dev/null & curl http://127.0.0.1:8200/v1/sys/health
异常现象
容器启动执行curl命令时抛出连接拒绝错误:
+ curl http://127.0.0.1:8200/v1/sys/health % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 curl: (7) Failed to connect to 127.0.0.1 port 8200: Connection refused
正常对照场景
直接在本地物理机启动Vault dev服务时,执行完全相同的curl命令可正常返回健康检查结果:
{"initialized":true,"sealed":false,"standby":false,"performance_standby":false,"replication_performance_mode":"disabled","replication_dr_mode":"disabled","server_time_utc":1608149576,"version":"1.5.4","cluster_name":"vault-cluster-1497c401","cluster_id":"98c78719-d8fc-2423-66bd-7e036654ba16"}
当前状态与诉求
- 最初判断问题根源为Dockerfile中8200端口的暴露配置有误
- 临时通过设置
export LOCALHOST='host.docker.internal'的方式规避了报错 - 需要明确该问题的根本触发原因,以及可落地的更优标准化解决方案
内容的提问来源于stack exchange,提问作者Serge Vu
相关产品推荐
相关产品推荐

