Như được minh họa bởi vấn đề 684 , export
sẽ không tồn tại trên các hình ảnh. (Đừng quên rằng mỗi chỉ thị Dockerfile sẽ tạo một vùng chứa trung gian, được cam kết thành một hình ảnh trung gian: hình ảnh đó sẽ không bảo toàn giá trị đã xuất)
ENV
sẽ:
Các biến môi trường được đặt sử dụng ENV
sẽ tồn tại khi một vùng chứa được chạy từ hình ảnh kết quả.
Bạn có thể xem các giá trị bằng cách sử dụng docker inspect
và thay đổi chúng bằng cách sử dụng docker run --env <key>=<value>
.
Vấn đề đã được minh họa bằng:
RUN export PATH=$PATH:/foo/bar # from directly in builder
Khi tôi làm điều docker run [img] bash -c 'echo $PATH'
đó không bao giờ bao gồm /foo/bar
.
Thử nó
Tạo một tệp dockerfile mới chứa:
FROM centos:6
ENV FOO=foofoo
RUN export BAR=barbar
RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ"
Sau đó xây dựng nó. Kết quả của bước cuối cùng là:
Step 4/4 : RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ"
---> Running in eb66196b238d
foofoo bazbaz
Bạn có thể thấy:
FOO
vẫn tồn tại qua các thùng chứa trung gian, nhờ vào ENV
từ khóa;
BAR
không tiếp tục ở bước tiếp theo, vì export
lệnh;
BAZ
được hiển thị chính xác vì biến được sử dụng trên cùng một vùng chứa.
docker
ví dụrun
với--env-file
hoặc--env
sẽ xuất các biến đó (bằng các đối số tùy chọn này) không? Xin lỗi vì gặp phải một câu trả lời cũ như vậy nhưng một websearch đã đưa nó đến cho tôi. Câu trả lời tốt đẹp btw.