修复docker构建的问题

This commit is contained in:
andy committed 2026-09-05 16:50:56 +08:00
1 parent 8700321af6
commit f60b416949
6 files changed
+76 -20

No files matched your search

@@ -102,6 +102,9 @@ chmod 600 .env
~~~text
FIRE_SAFETY_HTTP_ADDR=:8080
# Build-time only. Keep the official default unless the target server cannot
# reach it; this value is not passed to the running application container.
FIRE_SAFETY_BUILD_GOPROXY=https://proxy.golang.org,direct
FIRE_SAFETY_SUPERAGENT_ENABLED=true
FIRE_SAFETY_SUPERAGENT_BASE_URL=https://<superagent-api-host>
@@ -154,7 +157,31 @@ FIRE_SAFETY_POSTGIS_EXPECTED_SRID=4326
## 5. 构建、启动和本机检查
以下命令在服务器项目目录执行。Compose 构建上下文不把 .env 作为 Dockerfile 构建参数:
以下命令在服务器项目目录执行。Compose 构建上下文不复制 `.env`;非 Secret 的 `FIRE_SAFETY_BUILD_GOPROXY` 只会被映射为构建参数,并在运行容器环境中强制清空。
先检查 Go 模块代理是否从服务器/Docker 所在网络可达:
~~~bash
curl --head --connect-timeout 10 https://proxy.golang.org/
~~~
如果连接官方代理超时,可以测试经运维认可的替代代理。例如 [Goproxy.cn](https://goproxy.cn/) 官方说明支持标准 Go module proxy 协议:
~~~bash
curl --head --connect-timeout 10 https://goproxy.cn/
~~~
只有确认替代代理可达且组织允许使用时,才在服务器 `.env` 中改为:
~~~text
FIRE_SAFETY_BUILD_GOPROXY=https://goproxy.cn,direct
~~~
该值必须是不含用户名、密码或 Token 的代理地址;Docker build argument 不是 Secret 注入机制。若组织代理要求认证,需要另做 BuildKit Secret 设计,不能把凭证嵌进 URL 或 `.env` 中的构建参数。
主机侧 curl 成功只能初步说明连通性;最终仍以 `docker compose build` 是否能下载并校验模块为准。如果两个地址都超时,应修复 Docker/宿主机的 DNS、HTTPS 出口、透明代理或防火墙,或者使用组织自建的可信 Go module proxy。不要设置 `GOSUMDB=off`、跳过 `go.sum` 校验或反复执行 `docker compose up` 掩盖依赖下载失败。
代理连通后再构建并启动:
~~~bash
cd /home/firee-safety-ymd
@@ -168,6 +195,8 @@ curl --fail http://127.0.0.1:16587/health
预期结果:容器为 Up(健康状态由 Compose 显示),health 返回 HTTP 200;有限日志不应出现 DSN、密码、Token 或 API Key。docker compose config --quiet 只验证配置,不输出展开后的 Secret。若 Compose 不支持 --quiet,升级 Compose 或使用不会回显结果的等价校验方式。
若构建在 `RUN go mod download` 处失败,则镜像和容器尚未生成,后续访问宿主机端口会得到 connection refused。先解决模块代理连通性并重新执行 `docker compose build --pull`,成功后才能执行 `up -d`。
失败时只读取有限日志:
~~~bash