Когда вы даете CMD
(или RUN
или ENTRYPOINT
) в форме JSON -массив, вы должны вручную разбить команду на «слова». То есть вы запускаете эквивалент указанной в кавычках команды оболочки
'tail -f /dev/null'
, и все это интерпретируется как одно «слово» - пробелы и параметры принимаются как часть имени команды для просмотра в $PATH
.
Самый простой способ решения этой проблемы - удалить кавычки и просто использовать пустую строку как CMD
.
Обратите внимание, что контейнер, который вы создаете, не на самом деле ничего не делает: он не включает в себя исходный код приложения, а команда, которую вы предоставляете намеренно, ничего не делает навсегда. Помимо одного запущенного контейнера с незанятым процессом, вы получите тот же эффект, просто не запустив контейнер. Обычно вы хотите скопировать код своего приложения и установить CMD
для его фактического запуска:
FROM node:12.17.0-alpine
WORKDIR /src/webui
COPY package.json yarn.lock ./
RUN yarn install
COPY . ./
CMD ["yarn", "start"]
# Also works: CMD yarn start
# Won't work: CMD ["yarn start"]