2015-12-16 42 views
11

Docker 1.9 cho phép chuyển đối số cho dockerfile. Xem liên kết: https://docs.docker.com/engine/reference/builder/#argLàm cách nào để chuyển giá trị ARG sang ENTRYPOINT?

Làm cách nào tôi có thể chuyển cùng một số tiền trong ENTRYPOINT Hướng dẫn ??

dockerfile tôi có

ARG $ Phiên bản = 3.1
EntryPoint /tmp/folder-$Version/sample.sh bắt đầu

Tôi nhận được một lỗi trong khi tạo container với dockerfile trên . Vui lòng đề xuất cách chính xác để xác định đối số trong hướng dẫn ENTRYPOINT là gì?

+0

Vì vậy, bạn yêu cầu tùy chọn, ví dụ, '--entrypoint =/root/run.sh'? – BMW

Trả lời

0

Vì bạn đang sử dụng các biến bên trong một biểu thức lớn hơn, nó có thể được hưởng lợi từ được bao quanh bởi giá treo đồ xoăn:

ENTRYPOINT /tmp/folder-${Version}/sample.sh start 
2

Cú pháp cho ARG nên bỏ qua $.

Thay vì ARG $Version=3.1, hãy thử ARG Version=3.1.

6

Câu trả lời ngắn: bạn cần phải sử dụng ENV

Cả ARGENV không được mở rộng trong ENTRYPOINT hoặc CMD. (https://docs.docker.com/engine/reference/builder/#environment-replacement) Tuy nhiên, bởi vì ENV s được truyền vào như là một phần của môi trường, chúng có sẵn tại thời gian chạy, vì vậy vỏ có thể mở rộng chúng. (Điều này có nghĩa là bạn không thể sử dụng các hình thức mảng của ENTRYPOINT hoặc CMD.)

Dưới đây là một ví dụ:

$ cat arg/Dockerfile 
FROM debian:jessie 
ARG FOO=bar 
ENTRYPOINT echo ${FOO:-foo} 
$ sudo docker build arg 
Sending build context to Docker daemon 2.048 kB 
Step 1 : FROM debian:jessie 
---> f50f9524513f 
Step 2 : ARG FOO=bar 
---> Using cache 
---> 2cfdcb514b62 
Step 3 : ENTRYPOINT echo ${FOO:-foo} 
---> Running in 21fb9b42c10d 
---> 75e5018bad83 
Removing intermediate container 21fb9b42c10d 
Successfully built 75e5018bad83 
$ sudo docker run 75e5018bad83 
foo 
$ sudo docker run -e FOO=bas 75e5018bad83 
bas 
$ sudo docker build --build-arg FOO=bas arg 
Sending build context to Docker daemon 2.048 kB 
Step 1 : FROM debian:jessie 
---> f50f9524513f 
Step 2 : ARG FOO=bar 
---> Using cache 
---> 2cfdcb514b62 
Step 3 : ENTRYPOINT echo ${FOO:-foo} 
---> Using cache 
---> 75e5018bad83 
Successfully built 75e5018bad83 
$ sudo docker run 75e5018bad83 
foo 
$ cat env/Dockerfile 
FROM debian:jessie 
ARG FOO=bar 
ENV FOO=${FOO} 
ENTRYPOINT echo ${FOO:-foo} 
$ sudo docker build env 
Sending build context to Docker daemon 2.048 kB 
Step 1 : FROM debian:jessie 
---> f50f9524513f 
Step 2 : ARG FOO=bar 
---> Using cache 
---> 2cfdcb514b62 
Step 3 : ENV FOO ${FOO} 
---> Running in f157a07c1b3e 
---> a5e8c5b65a17 
Removing intermediate container f157a07c1b3e 
Step 4 : ENTRYPOINT echo ${FOO:-foo} 
---> Running in 66e9800ef403 
---> 249fe326e9ce 
Removing intermediate container 66e9800ef403 
Successfully built 249fe326e9ce 
$ sudo docker run 249fe326e9ce 
bar 
$ sudo docker run -e FOO=bas 249fe326e9ce 
bas 
$ sudo docker build --build-arg FOO=bas env 
Sending build context to Docker daemon 2.048 kB 
Step 1 : FROM debian:jessie 
---> f50f9524513f 
Step 2 : ARG FOO=bar 
---> Using cache 
---> 2cfdcb514b62 
Step 3 : ENV FOO ${FOO} 
---> Running in 6baf31684b9f 
---> 8f77ad154798 
Removing intermediate container 6baf31684b9f 
Step 4 : ENTRYPOINT echo ${FOO:-foo} 
---> Running in 892ac47cabed 
---> fa97da85bf8a 
Removing intermediate container 892ac47cabed 
Successfully built fa97da85bf8a 
$ sudo docker run fa97da85bf8a 
bas 
$ 
+0

Tại sao các biến môi trường có sẵn vào thời gian chạy? Là "quá trình chạy" một quá trình con của xây dựng một? –

1

Giống như Blake Mitchell sais, bạn không thể sử dụng ARG trong ENTRYPOINT. Tuy nhiên bạn có thể sử dụng ARG của bạn như là một giá trị cho ENV, cách mà bạn có thể sử dụng nó với ENTRYPOINT:

Dockerfile

ARG my_arg 
ENV my_env=$my_arg 

ENTRYPOINT echo $my_env 
Các vấn đề liên quan