2017-08-26 22 views
1

私はgitプロジェクトを複製しようとしており、ドッカーの中にmvn packageを入れようとしています。しかし、mavenは依存関係をダウンロードするためにネットワークに接続できません。これはDockerfileです:Mavenがドッカー内のネットワークに接続できません

FROM java:8 
FROM maven 
ADD id_rsa /root/.ssh/id_rsa 
ADD known_hosts /root/.ssh/known_hosts 
RUN git clone [email protected]:project/myapp.git 
WORKDIR myapp 
RUN mvn package 

これは、Mavenのビルドコマンドです:

sudo docker build --build-arg http_proxy=http://proxy.in.my.com:80 
--build-arg https_proxy=http://proxy.in.my.com:80 
--build-arg ftp_proxy=http://proxy.in.my.com:80 
--build-arg no_proxy=localhost,127.0.0.1,.us.my.com,.my.com 
-t myapp . 

私はmvn package中に次のエラーを取得しています:

Downloading: https://repo.maven.apache.org/maven2/org/jacoco/jacoco-maven-plugin/0.7.6.201602180812/jacoco-maven-plugin-0.7.6.201602180812.pom 

[ERROR] Plugin org.jacoco:jacoco-maven-plugin:0.7.6.201602180812 or one of its dependencies could not be resolved: 
Failed to read artifact descriptor for org.jacoco:jacoco-maven-plugin:jar:0.7.6.201602180812: Could not transfer artifact org.jacoco:jacoco-maven-plugin:pom:0.7.6.201602180812 from/to central (https://repo.maven.apache.org/maven2): Network is unreachable (connect failed) -> [Help 1] 

答えて

1

問題は、あなたが引数を構築渡していますあなたのDockerfileのどこにでもそれらを使用していません。引き数を渡すことは、環境変数を渡すことと同じではありません。

ドッカーファイルを更新します。また、あなたは2つのFROMを持っています。これはマルチステージビルドのために有効ですが、これではmavenだけが必要です。

次の2つの方法

FROM maven 
ARG http_proxy 
ENV http_proxy=${http_proxy} 
RUN git clone [email protected]:project/myapp.git 

これは、完全なイメージとしたときにプロキシがすでにそれをコンテナに設定されますイメージを実行するための環境を設定します、あなたのファイルを作成することができます。あなたが唯一のGitのクローンを行うためにこれを必要とする場合は、

FROM maven 
ARG http_proxy 
RUN http_proxy=${http_proxy} git clone [email protected]:project/myapp.git 

以下のアプローチを使用するこれが唯一のクローニングのための引数を設定し、それが実行されたとき、あなたのイメージは、プロキシを使用しません。

編集-1

のMaven HTTP_PROXYを尊重していないようです。だからあなたはMavenの設定で自分でプロキシを指定する必要があります。設定は、イメージ内に/usr/share/maven/conf/settings.xmlにあります。

|--> 
    <proxies> 
    <!-- proxy 
    | Specification for one proxy, to be used in connecting to the network. 
    | 
    <proxy> 
     <id>optional</id> 
     <active>true</active> 
     <protocol>http</protocol> 
     <username>proxyuser</username> 
     <password>proxypass</password> 
     <host>proxy.host.net</host> 
     <port>80</port> 
     <nonProxyHosts>local.net|some.host.com</nonProxyHosts> 
    </proxy> 
    --> 
    </proxies> 

コメントを解除し、デフォルトそれでコメントしてホスト・ディレクトリに設定ファイルを作成しているプロキシのセクションがあります。ドッカーファイルにCOPYコマンドを使用してファイルをコピーします。現在、mavenもプロキシを使用する必要があります

+0

私はDockerfileに直接プロキシを与えるようにしました: 'ENV http_proxy 'proxy''。これでも動作しません。私は大丈夫のためにプロキシが必要です – cppcoder

+0

ああ、私は答えを編集させてください。 mavenは特別な設定が必要です –

+0

@cppcoder、今すぐ編集を確認してください –

0

プロビジ設定を追加するには、maven設定ファイル '〜/ .m2/settings.xml'を更新する必要があります。

<proxies> 
<proxy> 
    <id>optional</id> 
    <active>true</active> 
    <protocol>$PROXY_PROTOCOL</protocol> 
    <username>$PROXY_USER</username> 
    <password>$PROXY_PASS</password> 
    <host>$PROXY_HOST</host> 
    <port>$PROXY_PORT</port> 
    <nonProxyHosts>$NO_PROXY</nonProxyHosts> 
</proxy> 
</proxies> 

https://github.com/alirizasaral/Maven-with-Proxy/を見てください。あなたはテンプレートmaven settings.xmlをイメージに追加する場所と非常に似たようなことをすることができ、Dockerfileにenvsubstの手順を実行して、プロキシの値プレースホルダをビルドargsとして渡したものに置き換えることができます。

これは、別のプロキシを使用してイメージを構築する場合と同じように、setting.xml内のプロキシ値をハードコーディングするよりも優れています。

関連する問題