RUN Инструкция по строительству Docker Изображение - PullRequest
0 голосов
/ 27 апреля 2020

Ниже мой Docker файл

ARG tag_info=latest
FROM alpine:${tag_info} AS my_apline
ARG message='Hello World'
RUN echo ${message}
RUN echo ${message} > myfile.txt
RUN echo "Hi Harry"

Когда я запускаю docker image build -t myimage:v1_0 - < Dockerfile

, вывод:

Sending build context to Docker daemon  2.048kB
Step 1/6 : ARG tag_info=latest
Step 2/6 : FROM alpine:${tag_info} AS my_apline
latest: Pulling from library/alpine
cbdbe7a5bc2a: Already exists
Digest: sha256:9a839e63dad54c3a6d1834e29692c8492d93f90c59c978c1ed79109ea4fb9a54
Status: Downloaded newer image for alpine:latest
 ---> f70734b6a266
Step 3/6 : ARG message='Hello World'
 ---> Running in 74bcc8897e8e
Removing intermediate container 74bcc8897e8e
 ---> d8d50432d375
Step 4/6 : RUN echo ${message}
 ---> Running in 730ed8e1c1d3
Hello World
Removing intermediate container 730ed8e1c1d3
 ---> 8417e3167e80
Step 5/6 : RUN echo ${message} > myfile.txt
 ---> Running in c66018331383
Removing intermediate container c66018331383
 ---> 07dc27d8ad3d
Step 6/6 : RUN echo "Hi Harry"
 ---> Running in fb92fb234e42
Hi Harry
Removing intermediate container fb92fb234e42
 ---> a3bec122a77f

Отображается «Привет Гарри» и "Hello World" в середине (что я не понимаю, почему)

Почему "Привет Гарри и" Hello World "не отображается, когда я вращаю контейнер из файла изображения?

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Из docker официальной документации:

The RUN instruction will execute any commands in a new layer on top of the current image and commit the results. The resulting committed image will be used for the next step in the Dockerfile.

Вы должны использовать CMD, если хотите получить описанное поведение.

The main purpose of a CMD is to provide defaults for an executing container. These defaults can include an executable, or they can omit the executable, in which case you must specify an ENTRYPOINT instruction as well.

Это имеет три формы:

 - CMD ["executable","param1","param2"] (exec form, this is the preferred form)
 - CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
 - CMD command param1 param2 (shell form)
1 голос
/ 27 апреля 2020

Поскольку команда RUN выполняет команды при построении изображения, а не при вращении контейнера с использованием изображения. Он используется для изменения изображения, например добавления новых пакетов с помощью apt-get или изменения прав доступа к файлу и т. Д. c

Если вам нужно что-то запустить при запуске контейнера, вам нужно использовать command до entrypoint инструкция

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...