簡體   English   中英

Docker:在代理后面安裝 npm

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM