gpt4 book ai didi

ssl - 如何在运行 Go 的 Busybox Docker 容器中进行 HTTPS 调用?

转载 作者:IT老高 更新时间:2023-10-28 21:22:03 26 4
gpt4 key购买 nike

我正在尝试在运行 Go 二进制文件的 Docker 容器中进行 HTTPS 调用。这给了我以下错误:

x509: failed to load system roots and no roots provided

查了一下,问题似乎是 BusyBox docker 镜像没有根 CA 证书。从 StackOverflow 上的其他答案看来,最好的方法是将 CA 根目录挂载到 /etc/ssl/certs 容器目录中。

要在本地进行测试,挂载主机的根 CA 证书是有意义的。在生产中运行时(我使用 Google Container Engine),我不确定如何指定根 CA 证书。我需要自己创建一个吗?或者 GKE 中是否有我可以重复使用的现有证书?

最佳答案

您可以有多种选择

从主机共享证书

正如您所指出的,您可以从主机共享 /etc/ssl/certs

使用带有证书的busybox

您可以使用像 odise/busybox-curl 这样已经安装了证书的图像。

为此使用 docker-compose 和共享卷

这是一种更好的方法,因为它不需要您依赖主机

version: '2'

services:
busybox:
image: busybox
command: sleep 1000
volumes:
- certificates:/etc/ssl/certs:ro
certifcate_installer:
image: alpine
command: sh -c 'apk update && apk add ca-certificates'
volumes:
- certificates:/etc/ssl/certs
volumes:
certificates:

使用多阶段 Dockerfile 构建它

FROM alpine as certs
RUN apk update && apk add ca-certificates

FROM busybox
COPY --from=certs /etc/ssl/certs /etc/ssl/certs

然后像普通文件一样构建它

vagrant@vagrant:~/certs$ docker build -t busyboxcerts .
Sending build context to Docker daemon 49.66kB
Step 1/4 : FROM alpine as certs
---> 4a415e366388
Step 2/4 : RUN apk update && apk add ca-certificates
---> Running in 0059f93b5fc5
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/community/x86_64/APKINDEX.tar.gz
v3.5.2-131-g833fa41a4d [http://dl-cdn.alpinelinux.org/alpine/v3.5/main]
v3.5.2-125-g9cb91a548a [http://dl-cdn.alpinelinux.org/alpine/v3.5/community]
OK: 7966 distinct packages available
(1/1) Installing ca-certificates (20161130-r1)
Executing busybox-1.25.1-r0.trigger
Executing ca-certificates-20161130-r1.trigger
OK: 5 MiB in 12 packages
---> 1a84422237e4
Removing intermediate container 0059f93b5fc5
Step 3/4 : FROM busybox
---> efe10ee6727f
Step 4/4 : COPY --from=certs /etc/ssl/certs /etc/ssl/certs
---> af9936f55fc4
Removing intermediate container 1af54c34a5b5
Successfully built af9936f55fc4
Successfully tagged busyboxcerts:latest
vagrant@vagrant:~/certs$ docker run busyboxcerts:latest ls /etc/ssl/certs
02265526.0
024dc131.0
03179a64.0

有关多阶段构建的更多详细信息,请参阅 https://docs.docker.com/engine/userguide/eng-image/multistage-build/#before-multi-stage-builds

所有方法都有各自的优缺点。我个人更喜欢最后一个或倒数第二个方法

关于ssl - 如何在运行 Go 的 Busybox Docker 容器中进行 HTTPS 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45388934/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com