2017-08-26 54 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

問題是你逝去的建立ARGS但不在Dockerfile的任何位置使用它們。傳遞參數與傳遞一個Environment變量不同。

所以更新dockerfile。你也有兩個FROM它們是有效的,因爲現在多階段構建,但你只需要這個。

你可以建立文件兩種方式

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

這將設置爲完整的圖像的環境,當你運行映像代理會已經設置了容器。如果你只需要這個做混帳克隆然後用下面的方法

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

這將只設置克隆參數,在運行時你的圖像將不使用代理。

編輯-1

Maven的似乎不接受HTTP_PROXY。所以你需要在maven config中自己指定代理。配置位於/usr/share/maven/conf/settings.xml內的maven圖像。

有它在默認情況下

|--> 
    <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> 

取消它的評論,並創建你的主機目錄中的配置文件的代理的部分。在Dockerfile中使用COPY命令複製文件。現在也應該Maven的使用代理

+0

我曾嘗試直接在Dockerfile這樣給代理:'ENV HTTP_PROXY「proxy''。即使這不起作用。我需要代理maven – 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步驟,在這裏你用作爲構建參數傳遞的值代替代理值佔位符。

這比硬編碼Setting.xml的內部代理值則可能需要使用不同的代理服務器來構建圖像更好。