Проблема с CMD, сопровождаемая ENTRYPOINT в Dockerfile - PullRequest
0 голосов
/ 27 февраля 2019

У меня Dockerfile выглядит следующим образом:

FROM quorumengineering/quorum:latest

RUN apk add nodejs npm
RUN cd ~
RUN npm i axios
COPY watcher.js .
ENTRYPOINT [ "geth", "--raft", "--raftjoinexisting", "1" ]
CMD "node watcher.js"

Я пытаюсь добиться запуска geth с параметрами, а затем запустить приложение nodejs watcher.js

Образ контейнераПравильное построение, используя команду:

docker build -t somename .

И он запускается правильно, используя команду:

docker run -d somename

Но когда я docker exec -it containerID sh и запускаю ps, я получаю:

/ # ps
PID   USER     TIME  COMMAND
    1 root      0:01 geth --raft --raftjoinexisting 1 /bin/sh -c "node watcher.js"
   16 root      0:00 sh
   23 root      0:00 ps

Похоже, что обе команды выполняются в одной строке ... Команда geth работает отлично, но приложение nodejs не запускается ... docker logs не дает мне интересного вывода.

1 Ответ

0 голосов
/ 27 февраля 2019

Entrypoint устанавливает команду и параметры, которые будут выполняться первыми при запуске контейнера.

CMD предоставляет значения по умолчанию при выполнении контейнера.Они будут выполнены после точки входа.

Docker рекомендует использовать ENTRYPOINT для установки основной команды изображения, а затем использовать CMD в качестве флагов по умолчанию.Вот пример Dockerfile, который использует обе инструкции.

FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]

Я рекомендую вам создать скрипт bash с необходимыми вам командами запуска, добавить его в контейнер и использовать его в CMD или ENTRYPOINT.

...