gpt4 book ai didi

scala - 在Docker Alpine Linux容器上运行Scala SBT时的证书异常(exception)

转载 作者:行者123 更新时间:2023-12-02 20:31:24 27 4
gpt4 key购买 nike

我有一个带有以下基本镜像的Dockerfile:
FROM frolvlad/alpine-oraclejdk8:slim
在同一个Dockerfile中,我还运行:activator compile
当我在MacBook上运行$ docker build -t some_name .时,SBT步骤将按预期工作。

当我在远程Ubuntu主机(AWS上的EC2实例)上通过相同的Dockerfile运行相同的命令时,我收到许多证书错误,如下所示:

[info] Resolving org.webjars#strip-json-comments;1.0.2-1 ...
[error] Server access Error: java.security.cert.CertificateException: No name matching repo.typesafe.com found url=https://repo.typesafe.com/typesafe/ivy-releases/org.webjars/strip-json-comments/1.0.2-1/ivys/ivy.xml
[error] Server access Error: java.security.cert.CertificateException: No name matching repo.scala-sbt.org found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/org.webjars/strip-json-comments/1.0.2-1/ivys/ivy.xml
[error] Server access Error: java.security.cert.CertificateException: No name matching repo1.maven.org found url=https://repo1.maven.org/maven2/org/webjars/strip-json-comments/1.0.2-1/strip-json-comments-1.0.2-1.pom
[info] Resolving com.typesafe.sbt#sbt-rjs;1.0.7 ...
[error] Server access Error: java.security.cert.CertificateException: No name matching repo.typesafe.com found url=https://repo.typesafe.com/typesafe/ivy-releases/com.typesafe.sbt/sbt-rjs/scala_2.10/sbt_0.13/1.0.7/ivys/ivy.xml
[error] Server access Error: java.security.cert.CertificateException: No name matching repo.scala-sbt.org found url=https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbt/sbt-rjs/scala_2.10/sbt_0.13/1.0.7/ivys/ivy.xml
[error] Server access Error: java.security.cert.CertificateException: No name matching repo1.maven.org found url=https://repo1.maven.org/maven2/com/typesafe/sbt/sbt-rjs_2.10_0.13/1.0.7/sbt-rjs-1.0.7.pom

SBT似乎正在与存储库联系以下载依赖项,并且无法验证其SSL证书。但是,当 docker build在我的MacBook上运行时,相同的过程可以正常工作并下载大量的依赖项。因此,我的MacBook和该Ubuntu主机的环境似乎有些差异。但是,无论在何处运行,都希望Docker提供完全的隔离和一致的行为。

有人对可能发生的事情有任何线索吗?

最佳答案

我相信我已经确定了问题,尽管我无法解释为什么会发生。

显示与Docker不一致行为的EC2 Ubuntu主机具有如下iptables规则:

$ sudo iptables -L -t nat
[...]
Chain xyz (1 references)
target prot opt source destination
REDIRECT tcp -- anywhere anywhere tcp dpt:https /* xyz */ redir ports 8443

该规则已到位,可将所有入站流量从端口443重定向到8443。它旨在将流量重定向到在同一台计算机上运行并具有自签名SSL证书的基于Java的应用程序。

当我使用Docker的默认网络设置在同一台机器上运行Docker容器时,并且从该容器,Docker或OS中发出HTTPS wget时,似乎将outbout连接重定向到Ubuntu主机上的端口8443,因此到本地基于Java的应用程序,该应用程序继而(大多数情况下)接受连接并返回无效的(自签名)证书详细信息,这些详细信息导致了我之前观察到的 java.security.cert.CertificateException

但是, iptables规则应仅影响到主机的入站连接。谁能解释为什么将Docker容器中的出站连接重定向到本地端口?

这些 iptables设置如何影响Docker?

关于scala - 在Docker Alpine Linux容器上运行Scala SBT时的证书异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39404688/

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