前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker启动react项目时遇到“一启动就终止”的问题和解决

Docker启动react项目时遇到“一启动就终止”的问题和解决

作者头像
张云飞Vir
发布2021-01-05 14:43:23
1.1K0
发布2021-01-05 14:43:23
举报
文章被收录于专栏:写代码和思考写代码和思考

一、遇到问题

我通过Docker 启动 react项目,启动后即容器停止,信息如下:

代码语言:javascript
复制
yunfeideMacBook-Pro:portal-web-platform zhangyunfei$ make run
docker rm -f portal-web-platform |true&&docker run --publish 3000:3000 --name portal-web-platform portal-web-platform:latest
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
yarn run v1.22.5
$ node scripts/start.js
ℹ 「wds」: Project is running at http://172.17.0.2/
ℹ 「wds」: webpack output is served from 
ℹ 「wds」: Content not from webpack is served from /app/public
ℹ 「wds」: 404s will fallback to /
Starting the development server...

Done in 4.46s.

它看起来是启动了,但是发现“所在的容器”状态是 Exist 的,容器停止了。刚开始以为是程序问题,找了好久为能解决。

二、分析

主要原因就是当你在后台运行的时候,这个镜像创建的容器会首先执行/bin/bash,这意味着,当在后台运行(-d)时,shell立即退出。所以除非命令未在前台运行,否则容器会立即停止

注意到:当我们在本地 执行 yarn start 后,终端会刷新,然后启动程序,看起来在这个过程中类似“ 原先的终端终止后,又启动了新的终端窗口 ”。而如果是在docker容器中,即导致容器的运行终止了。

三、解决

解决方法 通过-i或者-t为-d提供一个伪”tty n“

代码语言:javascript
复制
docker run -t -d images:tags

Docker 参数 -t 的作用

-t让docker分配一个伪终端并绑定到容器的标准输入上, -i则让容器的标准输入保持打开.

Docker中系统镜像的缺省命令是 bash,如果不加 -ti bash 命令执行了自动会退出。这是因为如果没有衔接输入流,本身就会马上结束。加-ti 后docker命令会为容器分配一个伪终端,并接管其stdin/stdout支持交互操作,这时候bash命令不会自动退出。

四、参考:

https://blog.csdn.net/qq_19381989/article/details/102781663 https://www.cnblogs.com/ExMan/p/11609987.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、遇到问题
  • 二、分析
  • 三、解决
    • Docker 参数 -t 的作用
    • 四、参考:
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档