我正在使用create-react-app,并希望通过Docker发布我的项目。
使用docker build . -t react-docker
命令,出现此错误:
/ bin / sh:1:反应脚本:找不到错误命令失败,退出 代码127。
我删除了package-lock.json
,然后再次运行npm install
,但是我的问题没有解决!
Dockerfile:
# stage: 1
FROM node:8 as react-build
WORKDIR /app
COPY . ./
RUN yarn
RUN yarn build
# stage: 2 — the production environment
FROM nginx:alpine
COPY — from=react-build /app/build /usr/share/nginx/html
EXPOSE 80
CMD [“nginx”, “-g”, “daemon off;”]
答案 0 :(得分:2)
您正在处理卷吗?通过常规安装,Docker应该可以访问您的资源。但是我在同事的机器上看到了一些奇怪的权限问题。因此,docker在尝试yarn install
时无法写入。因此,没有node_modules
被创建(就像您在讨论中所描述的那样)。因此没有react-scripts
。
解决方案:授予其他人访问您要安装的位置的权限。或者不使用卷。
答案 1 :(得分:1)
如果您不需要将其分为两步,则可以在一个Dockerfile
内完成所有操作,然后再删除安装所需的依赖项。
我不久前写了一篇关于安装的教程。尽管直接基于alpine
。
我写的Dockerfile是:
注意:,您可以将npm替换为yarn
文件: Dockerfile
FROM alpine
EXPOSE 80
ADD config/default.conf /etc/nginx/conf.d/default.conf
COPY . /var/www/localhost/htdocs
RUN apk add nginx && \
mkdir /run/nginx && \
apk add nodejs && \
apk add npm && \
cd /var/www/localhost/htdocs && \
npm install && \
npm run build && \
apk del nodejs && \
apk del npm && \
mv /var/www/localhost/htdocs/build /var/www/localhost && \
cd /var/www/localhost/htdocs && \
rm -rf * && \
mv /var/www/localhost/build /var/www/localhost/htdocs;
CMD ["/bin/sh", "-c", "exec nginx -g 'daemon off;';"]
WORKDIR /var/www/localhost/htdocs
用于nginx配置的文件
文件: default.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
location / {
root /var/www/localhost/htdocs/build;
# this will make so all routes will lead to
# index.html so that react handles the routes
try_files $uri $uri/ /index.html;
}
# You may need this to prevent return 404 recursion.
location = /404.html {
internal;
}
}
希望这可以作为一种替代选择。