[英]Docker: npm install behind proxy
我有這個 Dockerfile:
FROM node:argon
ENV http_proxy http://user:pass@proxy.company.priv:3128
ENV https_proxy https://user:pass@proxy.company.priv:3128
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
# Bundle app source
COPY . /usr/src/app
EXPOSE 8080
CMD [ "npm", "start" ]
但是我在npm install步驟中收到此錯誤:
npm info 如果它以 ok npm info using npm@2.14.12 npm info using node@v4.2.6 npm WARN package.json deployer-ui@1.0.0 沒有描述 npm WARN package.json deployer-ui@1.0. 0 無存儲庫字段。 npm WARN package.json deployer-ui@1.0.0 沒有 README 數據 npm info preinstall deployer-ui@1.0.0 npm info 嘗試注冊請求嘗試 #1 at 7:09:23 AM npm http request GET https://registry。 npmjs.org/body-parser npm info 嘗試注冊請求嘗試 #1 at 7:09:23 AM npm http request GET https://registry.npmjs.org/express npm info retry 將重試,上次嘗試時出錯:錯誤:無法建立隧道套接字,cause=write EPROTO npm info retry 將重試,上次嘗試時出錯:錯誤:無法建立隧道套接字,cause=write EPROTO
我想這是由於代理。 我也試過把
RUN npm config set proxy http://user:pass@proxy.company.priv:3128
RUN npm config set https-proxy http://user:pass@proxy.company.priv:3128
但仍然得到同樣的錯誤。
此外,在我的文件/etc/systemd/system/docker.service.d/http-proxy.conf 中,我有這個:
Environment="HTTP_PROXY=http://user:pass@proxy.company.priv:3128"
Environment="HTTPS_PROXY=https://user:pass@proxy.company.priv:3128"
提前致謝。
首先https_proxy
應該使用http url,而不是 https url。
其次,您不需要在 Dockfile 中嵌入代理設置:您可以使用構建時間變量
docker build --build-arg HTTP_PROXY=http://user:pass@proxy.company.priv:3128 --build-arg HTTPS_PROXY=http://user:pass@proxy.company.priv:3128 .
最后, docker 服務級別的代理設置允許 docker 守護進程從 Internet 拉取圖像。 這並不意味着docker build
執行的 unix 命令( RUN
指令)會從中受益。 因此需要將它們作為構建時環境變量傳遞。
我也有同樣的問題,不想在我的圖像中設置任何代理信息,因為我不想依賴我的公司環境。
我的解決方案是使用在網關模式下運行的 cntlm。 為此,我將標志Gateway
設置為yes
,在我的 cntlm 配置文件中設置以下允許規則:
Gateway yes
# Allow local
Allow 127.0.0.1
# Allow docker subnetwork
Allow 172.17.0.0/16
然后我可以通過獲取dokcer0接口地址(使用ifconfig
命令獲得)來運行我的docker文件:
docker build -t my-image --build-arg HTTP_PROXY=http://172.17.0.1:3128 --build-arg HTTPS_PROXY=http://172.17.0.1:3128 .
與docker run
相同:
docker run --rm -e HTTP_PROXY=http://172.17.0.1:3128 --build-arg HTTPS_PROXY=http://172.17.0.1:3128 my-image
但是請注意,從 docker 17.07 開始,您可以簡單地配置 docker 客戶端代理。
因此你的~/.docker/config.json
會像
{
"proxies": {
"default":{
"httpProxy": "http://172.17.0.1:3128/",
"httpsProxy": "http://172.17.0.1:3128/",
"noProxy": "127.0.0.1,172.17.0.0/16,*.some.compagny.domain"
}
}
將此添加到 Dockerfile 對我有用:
RUN npm config set https-proxy http://user:password@proxy.company.priv:80
RUN npm config set proxy http://user:password@proxy.company.priv:80
如Docker 文檔中所述,將以下內容添加到~/.docker/config.json
幫助了我:
{ "proxies": { "default": { "httpProxy": "http://127.0.0.1:3001", "httpsProxy": "http://127.0.0.1:3001", "noProxy": "*.test.example.com,.example2.com" } } }
(只是你知道,這個包是我自己寫的)
您可以使用docker-container-proxy ,它允許為任何 docker 容器配置代理,而無需編輯任何代碼。
趕緊跑:
npx dockerproxy start --address company-proxy-address.com --port 8080
# Do anything else that needs a Proxy
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.