如何将 host.docker.internal 添加到 Alpine Linux 容器中的受信任的根证书?

如何将 host.docker.internal 添加到 Alpine Linux 容器中的受信任的根证书?

我正在通过 Docker 使用 Alpine Linux。我想与 host.docker.internal 建立 HTTPS 连接。主机上有一个服务,可以通过localhost:8443主机访问。我想从容器连接到同一个服务。--network host无法工作,因为在容器内,localhost需要引用容器,而不是主机。

主机上端口 8443 上运行的服务实际上来自 SSH 隧道到 EC2 容器,最终允许连接到我们 AWS 网络中监听端口 443 的 Opensearch 服务器。

为了实现这一目标,我做了以下事情:

  1. 创建一个自签名证书,host.docker.internal指定主题备用名称:
    openssl req -newkey rsa:4096 \
             -x509 \
             -sha256 \
             -days 30650 \
             -nodes \
             -out docker-host.crt \
             -keyout docker-host.key \
             -subj "/C=US/ST=Nevada/L=Las Vegas/O=Company/OU=Engineering/CN=host.docker.internal" \
             -addext "subjectAltName=DNS:host.docker.internal"
    
  2. 将其复制到/usr/local/share/ca-certificatescp docker-host.crt /usr/local/share/ca-certificates
  3. 跑步update-ca-certificates
  4. 确认证书已被认可:
    openssl verify -CApath /etc/ssl/certs docker-host.crt
    
  5. 尝试使用 curl 连接:curl https://host.docker.internal:8443/

我总是收到错误curl: (60) SSL: no alternative certificate subject name matches target host name 'host.docker.internal'

我尝试创建一个“捆绑”证书:

cat docker-host.pem cert.pem > bundle.pem
cp bundle.pem /usr/local/share/ca-certificates/docker-host.crt

cert.pem被创建openssl s_client -showcerts -servername host.docker.internal -connect host.docker.internal:8443 > cert.pem

我从这里得到这个命令cURL 关于此问题的页面

docker-host.pem是用创建的cat docker-host.key docker-host.crt > docker-host.pem。我尝试将此 .pem(当然重命名为 .crt)复制到,/usr/local/share/ca-certificates/但没有什么区别。

无论如何,我总是得到相同的错误。我肯定误解了什么。

请指教。谢谢。

相关内容