2016-06-19 25 views
26

Nếu tôi đặt một biến môi trường, nói ENV ADDRESSEE=world, và tôi muốn sử dụng nó trong kịch bản entry point nối thành một chuỗi cố định như:Làm cách nào để sử dụng biến môi trường Docker trong mảng ENTRYPOINT?

ENTRYPOINT ["./greeting", "--message", "Hello, world!"] 

với world là giá trị của varible môi trường, làm thế nào tôi làm đi? Tôi đã thử sử dụng "Hello, $ADDRESSEE" nhưng điều đó dường như không hoạt động, vì phải mất $ADDRESSEE theo nghĩa đen.

Trả lời

53

Bạn đang sử dụng mẫu đơn exec của ENTRYPOINT. Không giống như mẫu vỏ , mẫu exec không gọi trình bao lệnh. Điều này có nghĩa là việc xử lý vỏ bình thường không xảy ra. Ví dụ: ENTRYPOINT [ "echo", "$HOME" ] sẽ không thay đổi biến trên $ HOME. Nếu bạn muốn xử lý vỏ thì hãy sử dụng biểu mẫu vỏ hoặc thực thi trình bao trực tiếp, ví dụ: ENTRYPOINT [ "sh", "-c", "echo $HOME" ].
Khi sử dụng biểu mẫu thực thi và thực hiện trực tiếp trình bao, như trong trường hợp đối với biểu mẫu trình bao, đó là vỏ đang thực hiện mở rộng biến môi trường, không phải là trình bao. (Từ Dockerfile reference)

Trong trường hợp của bạn, tôi sẽ sử dụng hình thức vỏ

ENTRYPOINT ./greeting --message "Hello, $ADDRESSEE\!" 
+1

Đây là một mảnh rất hữu ích của lời khuyên mà tôi đã chưa từng thấy trong bất kỳ hướng dẫn mà tôi đã đọc. – ChrisGuest

+1

'ENTRYPOINT java -jar /dockertest.jar -Djava.security.egd = tệp:/dev /./ urandom -Dserver.port = $ port' trong khi' ENV port = 123'. Cổng ENV không được giải quyết. Bất kỳ ý tưởng tại sao? – xetra11

-2

Cảm ơn tôi xoay tiêm một địa chỉ iP đến một ứng dụng java bên trong một container Docker từ tập tin Docker với:

ENTRYPOINT ["sh", "-c", "/usr/bin/java -cp /usr/share/tag/container-test.jar -DseleniumHubHost=$SELENIUM_HUB org.testng.TestNG /usr/share/tag/basic-flow-module.xml"] 

như bạn đề cập đến là vỏ ai làm việc thực varibable

nhờ

+0

Vui lòng không thêm câu trả lời để cảm ơn –

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