2016-09-20 28 views
7

Tôi đang cố gắng đặt biến môi trường trong vùng chứa docker trong quá trình xây dựng nhưng không thành công. Đặt chúng khi sử dụng lệnh chạy nhưng tôi cần đặt chúng trong quá trình xây dựng.Làm cách nào để đặt biến môi trường trong khi xây dựng trong docker

Dockerfile

FROM ubuntu:latest 
ARG TEST_ENV=something 

lệnh Tôi đang sử dụng để xây dựng

docker build -t --build-arg TEST_ENV="test" myimage . 

Chạy

docker run -dit myimage 

Tôi đang kiểm tra các biến môi trường có sẵn bằng cách sử dụng

docker exec containerid printenv 

và kết quả là

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
HOSTNAME=e49c1abfd58b 
TERM=xterm 
no_proxy=*.local, 169.254/16 
HOME=/root 

TEST_ENV là không có mặt

Trả lời

17

ARG là để thiết lập biến môi trường được sử dụng trong quá trình docker build - họ không có mặt trong hình ảnh cuối cùng, đó là lý do tại sao bạn don không thấy chúng khi bạn sử dụng docker run.

Bạn sử dụng ARG cho các cài đặt chỉ liên quan khi hình ảnh đang được xây dựng và không cần thiết bởi các vùng chứa mà bạn chạy từ hình ảnh. Bạn có thể sử dụng ENV cho các biến môi trường để sử dụng trong quá trình xây dựng và trong các thùng chứa.

Với Dockerfile này:

FROM ubuntu                            
ARG BUILD_TIME=abc                          
ENV RUN_TIME=123                          
RUN touch /env.txt                          
RUN printenv > /env.txt 

Bạn có thể ghi đè lên build arg như bạn đã làm với docker build -t temp --build-arg BUILD_TIME=def .. Sau đó, bạn nhận được những gì bạn mong đợi:

> docker run temp cat /env.txt                       
HOSTNAME=b18b9cafe0e0                         
RUN_TIME=123                           
HOME=/root                            
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin              
BUILD_TIME=def                           
PWD=/ 
+0

Sử dụng 'ENV' đã thêm biến môi trường nhưng sử dụng' docker build -t temp - build-arg BUILD_TIME = def' in "Một hoặc nhiều build-args [BUILD_TIME] không được tiêu thụ, không xây dựng. " Thêm 'ARG BUILD_TIME_ARG = mặc định' và' ENV BUILD_TIME = $ BUILD_TIME_ARG' được trợ giúp. Bạn có thể thêm nó vào câu trả lời của bạn không? Cảm ơn sự giúp đỡ. –

+0

Tôi vừa nhận ra rằng bạn có thể đặt 'ARG' với cùng tên với' ENV'. 'ARG BUILD_TIME = mặc định'' ENV BUILD_TIME = $ BUILD_TIME' –

+0

Trớ trêu thay Câu trả lời của Elton không đúng. Lời bình luận cuối cùng của Michael nhấn móng tay trên đầu và cho thấy làm thế nào để thực sự thiết lập một biến môi trường thông qua một xây dựng (tại thời điểm viết bài này). –

Các vấn đề liên quan