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的主要内容,如果未能解决你的问题,请参考以下文章