You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Golang Web服务器Dockerfile中添加cert.pem与key.pem文件?

解决Docker容器中Go HTTPS服务器证书缺失问题

核心问题

你的Docker镜像最终运行阶段(alpine镜像)未包含cert.pem和key.pem文件,导致容器内的Go程序找不到证书,无法正常启动HTTPS服务。

修改后的Dockerfile

# Build
FROM golang:1.23.3-alpine AS build-env
ENV APP_NAME=hxgo-skeleton
ENV CMD_PATH=cmd/api/main.go
COPY . $GOPATH/src/$APP_NAME
COPY .env $GOPATH/src/$APP_NAME
WORKDIR $GOPATH/src/$APP_NAME

# 构建Go应用
RUN CGO_ENABLED=0 go build -v -o /$APP_NAME $GOPATH/src/$APP_NAME/$CMD_PATH
 
# Run
FROM alpine:3.14
ENV APP_NAME=hxgo-skeleton
COPY --from=build-env /$APP_NAME .
COPY .env .
# 复制自签名证书到容器工作目录
COPY cert.pem key.pem .
EXPOSE 8080
CMD ./$APP_NAME

关键注意事项

  • 证书路径匹配:确保Go代码中加载证书的路径和容器内路径一致。如果代码使用相对路径./cert.pem和./key.pem,上述修改会将证书放在与二进制文件同一目录,无需调整代码。
  • 文件位置检查:确认cert.pem和key.pem与Dockerfile在同一目录下,否则需调整COPY指令的源路径(比如./certs/cert.pem)。
  • .dockerignore排查:检查项目根目录的.dockerignore文件,确保未排除.pem后缀文件,否则COPY指令会跳过这些文件。
  • 重新构建镜像:修改Dockerfile后,需重新构建镜像才能生效:
    sudo docker build -t hxgo-skeleton .
    

备选方案(从构建阶段复制)

如果证书已在构建阶段被复制到build-env镜像的项目目录中,也可直接从构建阶段复制到运行镜像,避免重复复制本地文件:

# Run阶段替换COPY证书的部分
COPY --from=build-env $GOPATH/src/$APP_NAME/cert.pem .
COPY --from=build-env $GOPATH/src/$APP_NAME/key.pem .

内容的提问来源于stack exchange,提问作者bascott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:58:10