docker ENV vs RUN xuất


92

Giả sử tôi muốn kết hợp các lệnh này

RUN command_1
ENV FOO bar
RUN command_2

thành

RUN command_1 && export FOO=bar && command_2

và đang tự hỏi liệu việc đặt biến với RUN exportvs ENVcó tương đương không.

Nói cách khác, có sự khác biệt giữa các lệnh này trong Dockerfile không?

ENV FOO bar

vs

RUN export FOO=bar

Câu trả lời:


149

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.

(Tôi đoán là có, nhưng :) Có nghĩa là 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.
hakre

@hakre vâng, chúng được thêm vào môi trường: xem stackoverflow.com/a/49872152/6309 trở xuống.
VonC

Cảm ơn bạn đã trả lời nhanh, nhưng câu trả lời đó không hiển thị các biến được đánh dấu để xuất. Ít nhất là không phải với tôi. Dù sao, tôi cũng nên tự làm bài tập ở đây, ví dụ: superuser.com/q/450868/63279 hoặc pubs.opengroup.org/onlinepubs/9699919799/utilities/… .
hakre
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.