React 应用程序退出 docker 容器,退出代码为 0

Posted

技术标签:

【中文标题】React 应用程序退出 docker 容器,退出代码为 0【英文标题】:React app exiting in docker container with exit code 0 【发布时间】:2020-07-08 17:42:42 【问题描述】:

我正在尝试使用 nginzx、flask 和 react 创建一个 docker-compose 设置。我使用 react-create-app (https://github.com/facebook/create-react-app) 启动了我的 react 应用程序,但尚未对其进行任何更改。

我的 react 应用程序的 Dockerfile 是:

FROM node:10

WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
COPY package*.json ./
RUN npm install --verbose

# Bundle app source
COPY . .


EXPOSE 3000
CMD ["npm", "start"]

撰写脚本是:

version: '3.1'

services:
    nginx:
        image: nginx:1.15
        container_name: nginx
        volumes:
            - ../:/var/www
            - ./nginx-dev.conf:/etc/nginx/conf.d/default.conf
        ports:
            - 80:80
        networks:
            - my-network
        depends_on:
            - flask
            - react
    react:
        build:
            context: ../react-app/
            dockerfile: ./Dockerfile
        container_name: react
        volumes:
            - ../react-app:/usr/src/app
        networks:
            my-network:
                aliases:
                    - react-app
        expose:
            - 3000
        ports:
            - "3000:3000"
    flask:
        ...
networks:
    my-network:

flask 和 nginx 容器启动正常,react 的输出是:

react    | 
react    | > react-app@0.1.0 start /usr/src/app
react    | > react-scripts start
react    | 
react    | ℹ 「wds」: Project is running at http://my-ip-address/
react    | ℹ 「wds」: webpack output is served from 
react    | ℹ 「wds」: Content not from webpack is served from /usr/src/app/public
react    | ℹ 「wds」: 404s will fallback to /
react    | Starting the development server...
react    | 
react    | 
react    | npm verb lifecycle react-app@0.1.0~start: unsafe-perm in lifecycle true
react    | npm verb lifecycle react-app@0.1.0~start: PATH: /usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/usr/src/app/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
react    | npm verb lifecycle react-app@0.1.0~start: CWD: /usr/src/app
react    | npm info lifecycle react-app@0.1.0~poststart: react-app@0.1.0
react    | npm verb exit [ 0, true ]
react    | npm timing npm Completed in 1727ms
react    | npm info ok 
react exited with code 0

【问题讨论】:

请注意,如果我 cd 进入 react-app 并运行 npm start,一切都会按预期进行。 尝试设置 tty 为真。 【参考方案1】:

在我的 docker-compose 文件的 React 组件中添加:stdin_open: true 解决了我的问题。

示例:

version: '3.1'

services:
    react:
        build:
            context: ../react-app/
            dockerfile: ./Dockerfile
        container_name: react
        volumes:
            - ../react-app:/usr/src/app
        networks:
            my-network:
                aliases:
                    - react-app
        expose:
            - 3000
        ports:
            - "3000:3000"
        stdin_open: true

【讨论】:

成功了! github.com/facebook/create-react-app/issues/8688【参考方案2】:

这看起来像是 [React-Scripts] v3.4.1 的问题。请查看此link

【讨论】:

是的,这非常相关。非常感谢。我将发布修复我的设置的 sn-p。【参考方案3】:

遇到了同样的问题。下面提到的步骤解决了我的问题: 1.添加stdin_open: true

version: '3.1'

services:
  nginx:
    .
    .
  react:
    stdin_open: true
    .
    .

2。进行上述更改后,不要忘记再次构建容器。

docker-compose down
docker-compose up --build

【讨论】:

【参考方案4】:

由于问题在于 react-scripts 版本 > 3.4.0 以及来自 sandeep-reddy 的发布链接,您可以使用 Dockerfile 中的这些行来固定安装的版本(感谢 Michael Herman)。

编辑:看起来您仍然需要 docker-compose.yml 文件中的 stdin_open:true 行才能使其工作。

RUN npm ci
RUN npm install react-scripts@3.4.0 -g --silent

【讨论】:

如果您仍然需要stdin_open: true,为什么要将此作为新答案发布? 我认为最初的解决方案会起作用,因为我看到它在其他地方被使用,但没有正确测试它。这就是我后来更正的原因。如果这样更好,我可以删除我的答案

以上是关于React 应用程序退出 docker 容器,退出代码为 0的主要内容,如果未能解决你的问题,请参考以下文章

Docker容器进入退出的几种方式

docker 操作 (让容器后台运行程序不退出)

如何知道 docker 容器退出的原因?

docker 退出容器 在怎么进入

如何避免Docker容器启动脚本运行后自动退出

如何避免Docker容器启动脚本运行后自动退出