【问题标题】:HTTP request in Docker container fails with HTTPS endpointDocker 容器中的 HTTP 请求因 HTTPS 端点而失败
【发布时间】:2026-01-15 21:50:02
【问题描述】:

我在 golang 中构建了一个小应用程序,使用 alpine:golang 基础映像,其中包括来自 HTTP.get 的响应。

我请求的 api 端点通过 HTTPS (https://jsonplaceholder.typicode.com/users) 运行

代码在本地运行良好,docker 镜像构建良好,但运行时出现以下错误:

The HTTP request failed with error Get "https://jsonplaceholder.typicode.com/users": x509: certificate signed by unknown authority

我不确定这是否是特定的 Docker 问题(我无法从其他 Docker 容器卷曲 HTTPS),我的网络限制(我不在 VPN 但我们使用 zScaler),或者我是否需要包含/配置一些东西作为我的 Dockerfile 的一部分。我的 dockerfile 看起来像:

FROM alpine:golang

#Create and set the working directory
RUN mkdir /app 
WORKDIR /app 

# Copy all the go scripts into the image working directory
COPY /pipelines/core/rtbf-pipeline-1 ./


# Make the binaries executable
RUN chmod +x /app/rtbf-pipeline-1

CMD ["app"]

任何帮助将不胜感激

【问题讨论】:

    标签: rest docker go https


    【解决方案1】:

    您需要将一组受信任的根证书复制到您的 Docker 映像。

    在您的Dockerfile 中添加类似:

    FROM golang:alpine AS build
    
    // build your go app here
    
    FROM scratch
    
    // copy go app from `build`
    // ...
    
    //
    // add trust certs
    //
    COPY --from=build etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
    

    【讨论】:

    • 感谢您的回复。不是 100% 确定在哪里可以找到 ca-certificates.crt?那是我应该使用 openssl 或其他东西自己生成的东西吗?
    • 文件在golang:alpine图片中:docker run -it golang:alpine ls -al /etc/ssl/certs/ca-certificates.crt-rw-r--r-- 1 root root 232933 Apr 24 14:29 /etc/ssl/certs/ca-certificates.crt
    • 所以上面的(两阶段)Dockerfile 将简单地将其从 docker build 图像复制到您的目标scratch 图像。
    • 我的 go 应用程序基于 golang:alpine 图像,但我没有使用从头开始。那么,如果它已经存在,为什么不对其进行验证呢?
    • 这可能是因为中间证书问题吗?我的笔记本电脑安装了 zscaler 作为公司设备?
    【解决方案2】:

    您可能需要添加

    RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk/*
    

    【讨论】: