Node.js 无法使用节点在Docker容器中运行React应用程序的开发生成:alpine

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应用程序,它基于Facebook的
创建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