当前位置: 首页 > 知识库问答 >
问题:

无法使用节点在Docker容器中运行React应用的开发构建:Alpine

越心水
2023-03-14

我有一个React应用程序,它基于Facebook的创建React应用程序。在开发过程中,我在特定的本地端口(60001)上运行它。为了实现这一点,我更改了包中脚本部分的默认开始脚本。将json添加到以下内容:

    "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服务器绑定到的容器上的端口。

我按照您的预期构建映像,目标是上面的builddevDocker阶段。

docker build --target build-dev -t my-app:local

然后像这样运行容器:

docker run -it -p 60001:60001 my-app:local

这样做的目的是在我期望我的开发应用程序构建正在运行时,将我的本地端口60001绑定到容器上的同一端口。

当我这样做时,我看到npm正在运行正确的脚本,并且应用程序已经编译。但是,浏览到http://localhost:60001/什么也没给我。只是一个被拒绝的错误连接,好像什么都没有。

我看不出我做错了什么。有什么想法吗?我希望我可能能够从容器日志中获得一些见解,但是当我为这个容器运行docker日志时,我只看到确认我的应用程序编译的反应脚本输出。


共有2个答案

慕胡媚
2023-03-14

似乎应用程序与容器localhost绑定。

试着调试

docker exec -it <container_id> ash
#then
curl localhost:60001

它应该在本地主机上工作。

要从容器外部访问它,请执行以下操作。

# i think its window syantax
"start": "set PORT=60001 HOST=0.0.0.0 react-scripts start",

"start": "PORT=60001 HOST=0.0.0.0 react-scripts start",

主持人:

默认情况下,开发web服务器绑定到设备上的所有主机名(本地主机、LAN网络地址等)。可以使用此变量指定其他主机。

高级配置主机选项react应用程序

暨弘懿
2023-03-14

如果你正在使用docker compose添加这一行为我解决了问题。。。

一行是stdin_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供参考:

FROM node:alpine

WORKDIR /app

COPY package.json yarn.lock ./

RUN yarn install

COPY . .

EXPOSE 3000

CMD ["yarn", "start"]

有关这方面的更多信息,我将查看github发行的createReact应用程序

GitHub问题

祝你好运这让我发疯好几个小时

PS不确定这将如何在生产构建中保持

 类似资料:
  • 我有一个react-app,它简单地显示hello-world消息,但我喜欢运行应用程序通过docker-container,但有这个问题。在此消息之后,进程停止,没有运行应用程序。 我不能理解我应该做什么,因为我有一个很小的应用程序,在Dockerfile中有基本代码 我需要安装webpack-dev-server吗,我尝试了,但得到了版本错误,如“手动添加服务器”的版本比已经安装的服务器低。所

  • 问题内容: 。 基本思想是使用音频和ui(vlc,firefox,skype等)运行应用程序 我正在使用pulseaudio搜索docker容器,但是找到了所有在tcp上使用pulseaudio流传输的容器。(应用程序的安全沙箱) https://gist.github.com/hybris42/ce429de428e5af3a344a https://github.com/jlund/docke

  • 在运行容器之后,我应该如何更改我的Dockerfile以使其具有一个正在运行的MySQL服务?

  • 问题内容: 我无法在Docker容器中运行任何yum命令,而没有出现以下错误: 我很困惑,因为我非常确定docker容器是使用默认用户root运行的。不过,如果我尝试将sudo放在a 或command 前面,则会得到: 我正在使用以下基本映像,以便可以在Docker中轻松运行Java Wildfly应用程序:https ://hub.docker.com/r/jboss/wildfly/ 底层发行

  • Dockerfile文件 docker撰写。yml 我发射的命令是为了让这个起来 docker-compose-fdocker-compose.yml 之后我去了https://localhost:3000这个项目没有加载。这是可复制的回购协议https://github.com/reyanshmishra/My-Portfolio-ReactJS 谢啦

  • 其基本思想是运行带有音频和ui的应用程序(vlc、firefox、skype…) 我在使用pulseaudio搜索docker容器,但我找到的所有容器都在TCP上使用pulseaudio流。(应用程序的安全沙箱) https://gist.github.com/hybris42/ce429de428e5af3a344a https://github.com/jlund/docker-chrome-