CMD с каналом в файле Dockerfile не пересылает

#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