2016-09-09 10 views
1

私は、次のベースイメージとDockerfileを持っている:証明書の例外

FROM frolvlad/alpine-oraclejdk8:slim

同じDockerfileで、私も実行します。activator compile

を私は実行すると、私のMacBookの$ docker build -t some_name .、SBTのステップは期待通りに機能します。

私は非常に同じコマンドを実行すると、非常に同じDockerfile上で、リモートのUbuntuホスト(AWS上のEC2インスタンス)の上に、私は次のような多くの証明書エラーを取得:

[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証明書を検証することができません。しかし、私のMacBook上でdocker buildが実行されている場合、全く同じプロセスが動作し、依存関係のヒープを問題なくダウンロードします。したがって、私のMacBookとそのUbuntuホストの間には環境に若干の違いがあるように見えます。しかし、Dockerはどこで実行されていても完全な分離と一貫した動作を提供することが期待されています。

誰かが何が起こっているのかについての手掛かりはありますか?

答えて

-1

画像frolvlad/alpine-oraclejdk8:slimはアルパインの公式Javaパッケージを使用しませんが、OracleのJDKは、glibcのハックで、それは何とかMUSLベースのシステム上で実行するために(つまりは、glibcのに対して、コンパイルされたバイナリとしてのみ配布されます)。それはであり、はアルパインによってサポートされていません。私はそれを使用することを強くお勧めします。

代わりにopenjdk:8-alpineイメージを使用するか、単純なアルパインイメージを使用して、単にopenjdk8パッケージをインストールする必要があります。ここでは SBTが正常に機能します。あなたは今も含まのIcedTeaからパッチの最新バージョンを試してみたい場合は


、その後、平野アルパインイメージを使用し、エッジブランチからopenjdk8をインストール:

echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories 
apk update 
apk add openjdk8 

それは一般的に良いアイデアではありません安定したパッケージとエッジを混在させると、ABIの非互換性が存在する可能性があります。したがって、システムをエッジにアップグレードすることをお勧めします。をedge/mainと置き換えて/etc/apk/repositoriesに置き換えてapk update && apk upgradeを実行してください。


オラクルJDKは、コードベースがほぼ同一である(すなわち、オープンソースである)のみのOpenJDKのブランド(プロプライエタリ)分布です。これは、Oracle JDK 8で動作するほとんどのJavaアプリケーションがOpenJDK 8でも実行されることを意味します。

詳細はmy comment in gliderlabs/docker-alpineにあります。

+0

「openjdk:8-alpine」をベースイメージとして使用しているのと全く同じことが起こります。さらに、主要な問題が残っています.DockerはMacOSとUbuntuという2つの異なる環境で一貫して動作していません。 – GabrielBR

+0

ネットワーク接続とDNSは実際にAWSのコンテナ内で機能しますか?あなたは例えばpingできますか? repo1.maven.org? –

+0

はい、それが私がチェックした最初のことです。私がEC2 Ubuntuホスト上で、コンテナではない場合、私はSBTができない依存関係を含め、wgetを使って何かをダウンロードできます。 – GabrielBR

0

私はこの問題を特定したと信じていますが、なぜそれが起こるのか説明できません。ドッカーとの一貫性のない動作を表示し

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 

ルールは8443にポート443からのすべての着信トラフィックをリダイレクトする場所です。トラフィックを、同じマシン上で実行され、自己署名入りのSSL証明書を持つJavaベースのアプリケーションにリダイレクトすることを目的としています。

Dockerの既定のネットワーク設定で同じマシン上でDockerコンテナを実行し、コンテナ、Docker、またはOS内からHTTPS wgetを発行すると、outbout接続がUbuntuホストのポート8443にリダイレクトされているようですしたがってローカルのJavaベースのアプリケーションは接続を受け入れ(ほとんどの場合)、前に見たjava.security.cert.CertificateExceptionを引き起こす無効(自己署名)証明書の詳細を返します。

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

iptablesの設定がDockerにどのように影響しますか?