2017-10-20 5 views
0

Wenn Sie ein neues Image erstellen, muss meine Dockerfile npm install aufrufen. Dies muss auch hinter einem Proxy funktionieren. An diesem Punkt der folgenden Dockerfile Code funktioniert:So verwenden Sie die Umgebungsvariablen des Docker-Computers beim Erstellen einer Docker-Datei

# Set proxy server 
ENV http_proxy http://myproxy.example 
ENV https_proxy http://myproxy.example 

# run NPM install 
RUN npm install --production 

Ich möchte aber, dass ich die ENV Variablen, die die gleichen wie in der Docker-Gerät so einstellen, kann ich eingerichtet haben mit

docker-machine create \ 
-d virtualbox \ 
--engine-env HTTP_PROXY=http://myproxy.example \ 
--engine-env HTTPS_PROXY=http://myproxy.example \ 
dock 

also würde ich So verwendet der Befehl npm install diese Umgebungsvariablen. Dies würde sicherstellen, dass Bilder dieser Docker-Datei in jeder Umgebung erstellt werden können, für die Proxy-Einstellungen verfügbar sind.

Ich habe bereits die erstellte Maschine als env mit dem Befehl set

docker-machine env --no-proxy dock 

Antwort

3

Der passieren könnte http_proxy und ähnliche Variablen sind predefined args, die Sie brauchen nicht in Ihrem Dockerfile angeben:

Docker hat eine Reihe von vordefinierten ARG-Variablen, die Sie ohne eine entsprechende ARG-Anweisung in der Dockerfile verwenden können.

  • HTTP_PROXY
  • http_proxy
  • https_proxy
  • https_proxy
  • FTP_PROXY
  • ftp_proxy
  • NO_PROXY
  • no_proxy

es zu verwenden, übergeben Sie es einfach als Build arg mit:

docker build \ 
    --build-arg http_proxy=http://myproxy.example \ 
    --build-arg https_proxy=http://myproxy.example \ 
    . 

Für Ihre npm install Linie können sie bereits in Ihrer Umgebung, und wenn nicht, sollten Sie in der Lage sein zu verwenden:

Hinweis, Sie sollten diese nicht in das Bild ENV platzieren, da dies sich negativ auf andere Stellen auswirken kann, an denen Sie das Image ausführen.

1

AFAIK ist dies nicht möglich, so, wie Sie es haben wollen. Die Umgebungsvariablen, die Sie in der Docker-Maschine festlegen, dienen zum Docken/Ziehen von Bildern usw. und können nicht referenziert werden.

Was Sie tun können, ist die ARG-Anweisung, die wie eine Variable innerhalb der Dockerfile (Link) behandelt. Dadurch können Sie Variablen mit dem docker build Befehl übergeben

Zum Beispiel können Sie es auf folgende Weise verwenden:

# define proxy variable 
ARG proxy 

# set proxy 
ENV http_proxy=$proxy 
ENV https_proxy=$proxy 

# run NPM install 
RUN npm install --production 

Also, wenn Sie das Bild bauen Sie den Proxy mit docker build -t [ImageName] --build-arg proxy=http://myproxy.example [ProjectDir]

Verwandte Themen