Docker build抛出“反应脚本:未找到”错误

时间:2019-01-29 10:35:15

标签: docker create-react-app

我正在使用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;”]

2 个答案:

答案 0 :(得分:2)

您正在处理卷吗?通过常规安装,Docker应该可以访问您的资源。但是我在同事的机器上看到了一些奇怪的权限问题。因此,docker在尝试yarn install时无法写入。因此,没有node_modules被创建(就像您在讨论中所描述的那样)。因此没有react-scripts

解决方案:授予其他人访问您要安装的位置的权限。或者不使用卷。

答案 1 :(得分:1)

如果您不需要将其分为两步,则可以在一个Dockerfile内完成所有操作,然后再删除安装所需的依赖项。

我不久前写了一篇关于安装的教程。尽管直接基于alpine

Deploying ReactJS With Docker


我写的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;
        }
}

希望这可以作为一种替代选择。