Node.js 无法使用节点在Docker容器中运行React应用程序的开发生成:alpine
我有一个React应用程序,它基于Facebook的Node.js 无法使用节点在Docker容器中运行React应用程序的开发生成:alpine,node.js,reactjs,docker,Node.js,Reactjs,Docker,我有一个React应用程序,它基于Facebook的创建React应用程序。在开发过程中,我在特定的本地端口(60001)上运行它。为了实现这一点,我将mypackage.json的scripts部分中的默认start脚本更改为以下内容: "start": "set PORT=60001 && react-scripts start", 我现在需要在使用相同端口的Docker容器中运行它。在我的Dockerfile中,我有以下两个阶段: FROM node:alpine
创建React应用程序
。在开发过程中,我在特定的本地端口(60001)上运行它。为了实现这一点,我将mypackage.json的scripts
部分中的默认start
脚本更改为以下内容:
"start": "set PORT=60001 && react-scripts start",
我现在需要在使用相同端口的Docker容器中运行它。在我的Dockerfile中,我有以下两个阶段:
FROM node:alpine as build
COPY ./package.json /app/package.json
WORKDIR /app
RUN npm install
RUN rm -f .npmrc
FROM build as build-dev
COPY ./public/ /app/public
COPY ./src/ /app/src
EXPOSE 60001
CMD ["npm", "start"]
请注意,我正在公开希望npm dev服务器绑定到的容器上的端口
我按照您的预期构建映像,目标是上面的builddev
Docker阶段
docker build --target build-dev -t my-app:local
然后,我按如下方式运行容器:
docker run -it -p 60001:60001 my-app:local
这样做的目的是在我期望我的开发应用程序构建正在运行时,将我的本地端口60001绑定到容器上的同一端口
当我这样做时,我看到npm正在运行正确的脚本,并且应用程序已经编译。然而,浏览给我什么都没有。只是一个被拒绝的错误连接,好像什么都没有
我看不出我做错了什么。有什么想法吗?我希望能够从容器日志中获得一些见解,但当我为此容器运行docker日志时,我只看到react脚本输出,确认我编译的应用程序。似乎是应用程序与容器localhost绑定
试着调试
docker exec -it <container_id> ash
#then
curl localhost:60001
或
主机:
默认情况下,开发web服务器绑定到服务器上的所有主机名
设备(本地主机、LAN网络地址等)。你可以用这个
变量指定不同的主机
如果您使用的是docker compose添加这一行解决了我的问题
该行为stdin\u open:true
下面是我的docker compose.yml
的一个基本示例:
version: "3.7"
services:
test-app:
stdin_open: true
container_name: test-app
build: .
ports:
- "3000:3000"
volumes:
- /app/node_modules
- .:/app
示例Dockerfile
供参考:
来自节点:alpine
WORKDIR/app
复制package.json.lock/
粗纱机
复制
暴露3000
CMD[“纱线”,“开始”]
有关这方面的更多信息,我将查看github发行的createReact应用程序
祝你好运!这让我发疯好几个小时
PS不确定这将如何在生产构建中保持下去谢谢您的回答。不幸的是,我得到了ash:curl:notfound
。我仍然尝试了您的建议“start”:“set PORT=60001 HOST=0.0.0.0 react scripts start”,
使容器崩溃,但也尝试了“start”:“set PORT=60001 HOST=0.0.0&&react scripts start”,
声称正在运行开发服务器,但本地主机上仍然没有站点。我还尝试在EXPOSE
行之前将ENV HOST=0.0.0.0
添加到我的Dockerfile中,并使用原始的start
脚本,但仍然存在相同的问题。Apk add--无缓存卷曲和tryal因此,如果提供指向github repo的链接,以便我可以尝试,我会在有机会时尝试。不幸的是,目前正在进行私人回购。如果有机会,我会尝试在某处制作一个演示……我今天已经被困了好几个小时了。感谢您。在生产中,您不应该“开始纺纱”,但您应该建立一个优化的生产结构并为其服务。类似于react脚本构建和&npx服务构建
"start": "PORT=60001 HOST=0.0.0.0 react-scripts start",
version: "3.7"
services:
test-app:
stdin_open: true
container_name: test-app
build: .
ports:
- "3000:3000"
volumes:
- /app/node_modules
- .:/app