1

次の基本イメージを含む 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 は、実行場所に関係なく、完全な分離と一貫した動作を提供することが期待されています。

何が起こっているのか、誰にも手がかりがありますか?

4

2 に答える 2

0

問題が発生した理由は説明できませんが、問題を特定したと思います。

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 を発行すると、送信接続が Ubuntu ホストのポート 8443 にリダイレクトされるように見えるため、をローカルの Java ベースのアプリケーションに送信すると、(ほとんどの場合) 接続が受け入れられ、無効な (自己署名された) 証明書java.security.cert.CertificateExceptionの詳細が返されます。

ただし、iptablesルールはホストへのインバウンド接続のみに影響する必要があります。Dockerコンテナ内からのアウトバウンド接続がローカルポートにリダイレクトされている理由を誰か説明できますか?

iptablesこれらの設定は Docker にどのように影響しますか?

于 2016-09-13T05:02:02.327 に答える