Как передать значение ARG для ENTRYPOINT?

Docker 1.9 позволяет передавать аргументы в файл докеров. См. Ссылку: https://docs.docker.com/engine/reference/builder/#arg

Как я могу передавать те же самые исправления в инструкции ENTRYPOINT?

Мой файл dockerfile имеет

ARG $Version = 3.1
ENTRYPOINT/tmp/folder-$Version/sample.sh start

Я получаю сообщение об ошибке при создании контейнера с указанным выше файлом docker. Пожалуйста, представьте, какой правильный способ указать аргумент в инструкции ENTRYPOINT

Ответ 1

Как и Блейк Митчелл, вы не можете использовать ARG в ENTRYPOINT. Однако вы можете использовать ARG в качестве значения для ENV, таким образом вы можете использовать его с ENTRYPOINT:

Dockerfile

ARG my_arg
ENV my_env_var=$my_arg

ENTRYPOINT echo $my_env_var

и запустить:

docker build --build-arg "my_arg=foo" ...

Ответ 2

Короткий ответ: вам нужно использовать ENV

Оба ARG и ENV не расширены в ENTRYPOINT или CMD. (https://docs.docker.com/engine/reference/builder/#environment-replacement) Однако, поскольку ENV передаются как часть среды, они доступны во время выполнения, поэтому оболочка может расширьте их. (Это означает, что вы не можете использовать форму массива ENTRYPOINT или CMD.)

Вот пример:

$ 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
$

Ответ 3

Синтаксис ARG должен опускать $.

Вместо ARG $Version=3.1 попробуйте ARG Version=3.1.

Ответ 4

Поскольку вы используете переменную внутри большего выражения, это может быть полезно для окружения фигурных скобок:

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