2016-02-09 3 views
5

У меня есть этот Dockerfile:Docker: НПМ установить позади прокси

FROM node:argon 

ENV http_proxy http://user:[email protected]:3128 
ENV https_proxy https://user:[email protected]: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 info it worked if it ends with ok npm info using [email protected] npm info using [email protected] npm WARN package.json [email protected] No description npm WARN package.json [email protected] No repository field. npm WARN package.json [email protected] No README data npm info preinstall [email protected] npm info attempt registry request try #1 at 7:09:23 AM npm http request GET https://registry.npmjs.org/body-parser npm info attempt registry request try #1 at 7:09:23 AM npm http request GET https://registry.npmjs.org/express npm info retry will retry, error on last attempt: Error: tunneling socket could not be established, cause=write EPROTO npm info retry will retry, error on last attempt: Error: tunneling socket could not be established, cause=write EPROTO

Я предполагаю, что это связано с прокси-сервером. Я также попытался поставить

RUN npm config set proxy http://user:[email protected]:3128 
RUN npm config set https-proxy http://user:[email protected]:3128 

, но все еще получаю ту же ошибку.

Кроме того, в моем файле /etc/systemd/system/docker.service.d/http-proxy.conf У меня есть это:

Environment="HTTP_PROXY=http://user:[email protected]:3128" 
Environment="HTTPS_PROXY=https://user:[email protected]:3128" 

Спасибо заранее.

ответ

3

Сначала https_proxy должен использовать URL-адрес http, а не https-адрес.

Во-вторых, вам не нужно вставлять ваши настройки прокси в вашем Dockfile: вы можете использовать build time variables

docker build --build-arg HTTP_PROXY=http://user:[email protected]:3128 --build-arg HTTPS_PROXY=http://user:[email protected]:3128 .

Наконец, proxy settings at the docker service level позволяет докер демон тянуть изображения из Интернета. Это не означает, что команда unix, выполненная (RUN директива) на docker build, выиграет от них. Следовательно, необходимо передать их как переменные среды построения времени.

3

У меня также была такая же проблема, и я не хотел устанавливать какую-либо прокси-информацию на моем изображении, поскольку я не хотел быть зависимым от среды моей компании.

Моим решением было использовать cntlm, работающий в режиме шлюза. Для этого я поставил набор флаг Gateway в yes следующего разрешающих правил в моем файле конфигурации cntlm:

Gateway   yes 
# Allow local 
Allow   127.0.0.1 
# Allow docker subnetwork 
Allow   172.17.0.0/16 

Тогда я был в состоянии запустить свой файл Docker, получая адрес интерфейса dokcer0 (получили с ifconfig команды):

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 . 
+0

У меня такая же проблема, но ваше решение не работает для меня. У меня cntlm работает успешно с Firefox, настройки прокси-сервера до 127.0.0.1:3128. Но независимо от того, что я пытаюсь использовать с докере IP, это не работает. Я использую Windows 10. У меня 10.0.75.0 в качестве адреса подсети и для ipconfig/all у меня есть 10.0.75.1. NPM ничего не установит. Есть идеи? BTW: Если я вставляю информацию о прокси пользователя: [email protected], он отлично работает. –

Смежные вопросы