Ошибка перехвата `SyntaxError: отсутствует) после списка аргументов` при попытке развернуть приложение NextJS в Docker

#reactjs #docker #next.js

#reactjs #docker #next.js

Вопрос:

У меня есть базовая настройка NextJS с пользовательским экспресс-сервером.

Я пытаюсь настроить приложение. Вот мой Dockerfile :

 FROM node:alpine

WORKDIR /usr/app

RUN npm install --global pm2

COPY ./package.json ./

RUN yarn docker:build

COPY ./ ./

RUN yarn build

EXPOSE 3000

USER node

CMD [ "pm2-runtime", "yarn", "dev" ]
 

Моя docker:build команда,

 rm -rf node_modules amp;amp; rm -rf yarn.lock yarn amp;amp; yarn
 

В любом случае, я пытаюсь запустить docker-compose up и сталкиваюсь с приведенной ниже ошибкой:

 nextjs_1  | /opt/yarn-v1.22.5/bin/yarn:2
nextjs_1  | argv0=$(echo "$0" | sed -e 's,\,/,g')
nextjs_1  |         ^^^^
nextjs_1  | SyntaxError: missing ) after argument list
nextjs_1  |     at wrapSafe (node:internal/modules/cjs/loader:1018:16)
nextjs_1  |     at Module._compile (node:internal/modules/cjs/loader:1066:27)
nextjs_1  |     at Object.Module._extensions..js (node:internal/modules/cjs/loader:1131:10)
 

Я понятия не имею, что я здесь делаю не так.

Я упростил свою настройку в репозитории здесь.

Любая помощь будет оценена.

Проблема с Github

Комментарии:

1. Почему бы не просто RUN yarn на этом этапе (у изображения еще не будет node_modules каталога, и вы не хотите удалять файл блокировки)? Возникает ли эта ошибка при создании образа или его запуске? Вы делаете что-то, что может привести yarn к интерпретации оболочки скрипта с помощью Node?

Ответ №1:

 diff --git a/Dockerfile b/Dockerfile
index 658452d..8e2fe06 100644
--- a/Dockerfile
    b/Dockerfile
@@ -28,4  28,4 @@ EXPOSE 3000
 USER node
 
 # Run npm start script when container starts
-CMD [ "pm2-runtime", "yarn", "dev" ]
 No newline at end of file
 CMD [ "pm2-runtime", "start", ".next/production-server/server.js" ]
 
 /usr/app # pm2-runtime start .next/production-server/server.js 
2020-11-21T05:51:18: PM2 log: Launching in no daemon mode
2020-11-21T05:51:18: PM2 log: App [server:0] starting in -fork mode-
2020-11-21T05:51:18: PM2 log: App [server:0] online
event - compiled successfully
App listening on port 3000

 

При next сборке он сбрасывает скомпилированный JavaScript в .next папку. Кроме того, pm2 принимает start команду.