我在docker构建过程中遇到了npm问题。我身处公司代理网络环境下,已经阅读了约30篇相关文章(以及stackoverflow帖子),但仍然无法解决问题。
我可以在docker构建过程之外(同样使用代理)执行“npm install”命令并获取所有必要的依赖项,但是在构建过程中无法执行。
目前我尝试过以下方法:
1. 直接使用代理(包括硬编码验证数据)以及使用CNTLM。以下描述是使用CNTLM时的情况。 2. 使用http存储库,并将strict_ssl设置为false。 npm config set strict-ssl=false \ npm config set registry=http://registry.npmjs.org/ \
3. 将代理设置传递给--build-arg、env和RUN参数 4. 在没有node_modules的情况下开始新的git checkout,并运行npm install
我正在尝试使用以下命令进行构建:
我可以在docker构建过程之外(同样使用代理)执行“npm install”命令并获取所有必要的依赖项,但是在构建过程中无法执行。
目前我尝试过以下方法:
1. 直接使用代理(包括硬编码验证数据)以及使用CNTLM。以下描述是使用CNTLM时的情况。 2. 使用http存储库,并将strict_ssl设置为false。 npm config set strict-ssl=false \ npm config set registry=http://registry.npmjs.org/ \
3. 将代理设置传递给--build-arg、env和RUN参数 4. 在没有node_modules的情况下开始新的git checkout,并运行npm install
我正在尝试使用以下命令进行构建:
$ sudo docker build --build-arg HTTP_PROXY=http://127.0.0.1:3128 --build-arg HTTPS_PROXY=http://127.0.0.1:3128 .
输出结果
Sending build context to Docker daemon 226.6 MB
Step 1 : FROM node:argon
---> c74c117ed521
Step 2 : ENV http_proxy http://127.0.0.1:3128/
---> Using cache
---> ad2e2df7429b
Step 3 : ENV https_proxy http://127.0.0.1:3128/
---> Using cache
---> 75fb2eb0bb22
Step 4 : RUN mkdir -p /usr/src/app
---> Using cache
---> ee79de37d6d7
Step 5 : WORKDIR /usr/src/app
---> Using cache
---> 404356f5def0
Step 6 : COPY package.json /usr/src/app/
---> Using cache
---> a2ec47267628
Step 7 : RUN git config --global http.proxy http://127.0.0.1:3128/
---> Running in 3cd5db8b1371
---> 7353cd94b67a
Removing intermediate container 3cd5db8b1371
Step 8 : RUN npm install
---> Running in 79ed0eb809d8
npm info it worked if it ends with ok
npm info using npm@2.15.5
npm info using node@v4.4.6
npm info preinstall app
npm info attempt registry request try #1 at 10:24:02 AM
npm http request GET https://registry.npmjs.org/bufferutil
npm info attempt registry request try #1 at 10:24:02 AM
npm http request GET https://registry.npmjs.org/connect-mongo
<snip>
npm info retry will retry, error on last attempt: Error: tunneling socket could not be established, cause=connect ECONNREFUSED 127.0.0.1:3128
npm info retry will retry, error on last attempt: Error: tunneling socket could not be established, cause=connect ECONNREFUSED 127.0.0.1:3128
<snip>
npm ERR! Linux 3.13.0-88-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install"
npm ERR! node v4.4.6
npm ERR! npm v2.15.5
npm ERR! code ECONNRESET
npm ERR! network tunneling socket could not be established, cause=connect ECONNREFUSED 127.0.0.1:3128
npm ERR! network This is most likely not a problem with npm itself
npm ERR! network and is related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly. See: 'npm help config'
npm ERR! Please include the following file with any support request:
npm ERR! /usr/src/app/npm-debug.log
这是我的Docker脚本
FROM node:argon
ENV http_proxy http://127.0.0.1:3128/
ENV https_proxy http://127.0.0.1:3128/
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json /usr/src/app/
# setup proxies
RUN git config --global http.proxy http://127.0.0.1:3128/ && \
npm config set strict-ssl=false \
npm config set registry=http://registry.npmjs.org/ \
npm config set proxy=http://127.0.0.1:3128/ && \
npm config set https-proxy=http://127.0.0.1:3128/
# Install dependencies for node.js
RUN npm install
# Bundle app source
COPY . /usr/src/app
EXPOSE 8080
CMD [ "npm", "start" ]
npm
本身。这在 Docker 构建过程中解决了问题。我所要做的就是在运行npm install
命令之前将以下行添加到我的 Dockerfile 中:RUN npm config set http-proxy http://<my company proxy>:8099
和RUN npm config set https-proxy http://<my company proxy>:8099
。 - Lester Grayhttp(s)_proxy
变量将会遵循。 - dlouzan