【问题标题】:I can't run a docker container of my reactjs app我无法运行我的 reactjs 应用程序的 docker 容器
【发布时间】:2020-08-10 04:29:15
【问题描述】:

我是 Docker 新手,我尝试运行 create-react-app 映像的容器,所以这些是我已经完成的步骤:

  1. npx create-react-app frontend

  2. 我创建了一个Dockerfile.dev,如下所示:

    FROM node:alpine
    WORKDIR '/app'
    COPY package.json .
    RUN npm install
    COPY . . 
    CMD ["npm" , "run" , "start"]
    
  3. 我使用这个命令来构建镜像:

    docker build -f Dockerfile.dev .
    
  4. 当我使用提供的图像 ID 运行容器时:

    docker run -p 3000:3000 my_docker_image_id
    

什么都没发生,as seen in this screenshot

但是当我将-i 参数添加到我的命令时,一切正常,as seen in this screenshot

docker run -p 3000:3000 -i my_docker_image_id

有什么想法吗?

【问题讨论】:

    标签: docker create-react-app webpack-dev-server


    【解决方案1】:

    -i 标志启用将输出连接到终端的交互模式。您是否尝试在没有-i 标志的情况下访问该站点?它应该为您的页面提供服务,但只是不向您的控制台显示输出。


    更新:

    因此,根据您找到的GitHub issue,您还可以使用带有-it 标志的docker run。 -i 上面已经解释过了,但是-t 启用 TTY 的方式与 docker-compose.yml 中的 stdin_open: true 行类似

    docker -it run -p 3000:3000 my_docker_image_id


    添加 -d 标志,以启用分离模式,并允许 Docker 在后台运行您的容器。然后您可以运行docker logs {container_id} 来查看服务器的输出。

    这是 Docker 文档中的链接:https://docs.docker.com/engine/reference/run/#detached-vs-foreground

    在启动 Docker 容器时,必须先决定是否要 以“分离”模式或在后台运行容器 默认前台模式:

    -d=false:分离模式:后台运行容器,打印新容器id

    【讨论】:

    • 感谢您的回复,但是当我在没有 -i 的情况下运行命令并尝试访问 localhost:3000 时,我得到了 ERR_CONNECTION_REFUSED。当我使用 -d 参数时,我使用我的 id 容器运行 docker logs,打印相同的输出“正在启动开发服务器......”并且没有任何反应,如果我在此之后运行 docker ps,我没有运行容器。
    • 尝试将EXPOSE 3000 添加到您的 Dockerfile。
    • 再次感谢您,看来您是唯一帮助我的人:D,我尝试了一下,我遇到了同样的问题 :(
    • 您好,Joe 先生,我找到了解决方案,我认为这是 react-scripts@3.4.1 中的问题,所以我添加了一个 docker-compose 文件并添加了解决我的问题的流水线问题:stdin_open: true。如果您想了解更多信息,我会为您提供我在其中找到解决方案的页面的链接。github.com/facebook/create-react-app/issues/8688。再次感谢您的无私帮助先生。
    • 很高兴您能够重新开始工作。我确实更新了我的答案,以显示使用 docker run 版本需要什么。
    【解决方案2】:

    3.4.1 版本的 react-scripts 存在问题,

    所以我添加了一个 docker-compose 文件并指定了这一行来解决问题并节省我的时间:

    stdin_open: true 
    

    所以我的 docker-compose.yml 文件看起来像这样:

    version : '3'
    services:
        web:
            build: 
                context: .
                dockerfile: Dockerfile.dev
            stdin_open: true    
            ports:
                - "3000:3000"
            volumes:
                - /app/node_modules
                - .:/app     
    

    【讨论】:

    • 很高兴认识先生。
    • 啊,你成就了我的一天!谢谢! stdin_open: true 工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2020-12-30
    • 2021-01-05
    • 2017-11-03
    • 1970-01-01
    • 2022-12-14
    相关资源
    最近更新 更多