#node.js #docker
Вопрос:
У меня есть эта команда, чтобы запустить Node.js веб-сервер, подобный этому:
node --inspect=0.0.0.0:9229 --preserve-symlinks /app/api/dist/server.js | pino-pretty
Я помещаю его в док-файл в качестве CMD
:
CMD ["node", "--inspect=0.0.0.0:9229", "--preserve-symlinks" ,"/app/api/dist/server.js", "|","pino-pretty"]
Служба запускается при вызове docker run
, но |
игнорируется, поэтому журналы не пересылаются pino-pretty
.
Что я здесь делаю не так?
Я мог бы ввести всю команду в start.sh
или CMD ["npm", "run", "start:prod"]
, но я хочу понять основную проблему.
Ответ №1:
Я мог бы поместить всю команду в start.sh или используйте CMD [«npm», «запуск», «запуск:prod»], но я хочу понять основную проблему.
Труба-это конструкция оболочки, например /bin/sh
, особенность /bin/bash
, и подобных оболочек. Когда вы определяете CMD с помощью синтаксиса json/exec, вы явно указываете docker выполнить команду без оболочки. Поэтому вам нужно либо запустить команду в скрипте, явно вызвать оболочку, либо выполнить ее с помощью синтаксиса строки/оболочки, чтобы docker выполнил команду с помощью оболочки:
CMD node --inspect=0.0.0.0:9229 --preserve-symlinks /app/api/dist/server.js | pino-pretty