#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)
Я понятия не имею, что я здесь делаю не так.
Я упростил свою настройку в репозитории здесь.
Любая помощь будет оценена.
Комментарии:
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
команду.