Như được minh họa bởi vấn đề 684 , exportsẽ 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)
ENVsẽ:
Các biến môi trường được đặt sử dụng ENVsẽ 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 inspectvà 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:
FOOvẫn tồn tại qua các thùng chứa trung gian, nhờ vào ENVtừ khóa;
BARkhông tiếp tục ở bước tiếp theo, vì exportlệ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.
dockerví dụrunvới--env-filehoặc--envsẽ 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.