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

一、遇到问题

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

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“

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/102781663https://www.cnblogs.com/ExMan/p/11609987.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值