如何在GitLab CI脚本中将docker inspect结果赋值给环境变量
GitLab CI 正确获取Postgres容器IP并拼接数据库连接串的方案
核心修正点
你需要用Shell的命令替换语法$()将docker inspect的执行结果赋值给变量,同时注意拼接变量时引号的选择(单引号不会解析变量,需要用双引号或者不加引号)。
1. 变量赋值行修正写法
db_host=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' pg_test_container)
2. 拼接DATABASE_URL注意事项
⚠️ 注意:直接通过容器内部IP访问Postgres时,需要使用容器内部端口5432,而非你映射到宿主机的5434,宿主机端口仅在从宿主机网络访问时生效。正确写法:
DATABASE_URL="postgresql://postgres:1234@${db_host}:5432/pg_db"
完整修正后的test阶段示例
test: stage: test script: - echo "testing" - docker run -d -p 5434:5432 --rm --name pg_test_container --env-file test_database.env postgres:latest # 等待数据库启动完成,避免连接报错,可根据实际情况调整等待时间 - sleep 10 # 正确获取容器IP - db_host=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' pg_test_container) - echo $db_host # 正确拼接数据库连接串 - DATABASE_URL="postgresql://postgres:1234@${db_host}:5432/pg_db" - echo $DATABASE_URL # 后续测试逻辑 # ... - docker stop pg_test_container tags: - test
可选优化
如果不想硬等固定时间,可以用pg_isready工具检测数据库可用性:
- until docker exec pg_test_container pg_isready -U postgres; do sleep 1; done
内容的提问来源于stack exchange,提问作者Amin Ba
相关产品推荐
相关产品推荐

