在Docker容器中运行React应用无法正常运行

Jon*_*Jon 0 docker create-react-app

我有一个小型的React应用,我想在Docker容器中运行。我将以下Dockerfile填写如下:

# base image
FROM node:9.6.1

# set working directory
RUN mkdir /app
WORKDIR /app

ENV PATH /app/node_modules/.bin:$PATH

# install and cache app dependencies
COPY package-lock.json /app/package-lock.json
COPY package.json /app/package.json

COPY . /app

RUN npm install

# start app
CMD ["npm", "start"]
Run Code Online (Sandbox Code Playgroud)

完成构建后,我能够正确地(我认为)创建映像。

>docker image list
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
notes                latest              e4ccada07b84        18 hours ago        846MB
Run Code Online (Sandbox Code Playgroud)

但是,当我在图像上运行时,它会运行npm start,但不会在我指定的端口中运行,如果我转到它提供的URL,它将无法连接任何东西。

>docker run -p 3030:3030  notes:latest

You can now view notes in the browser.

  Local:            http://localhost:3000/
  On Your Network:  http://172.17.0.4:3000/

Note that the development build is not optimized.
To create a production build, use npm run build.
Run Code Online (Sandbox Code Playgroud)

我缺少让它在容器中正确运行的什么?

TJ *_*dle 5

您的React应用程序设置为在容器的端口3000上运行,并且由于您提到过要转到输出中的URL;我假设您正在尝试访问主机的3000端口。

将命令更改为以下内容;它将主机的端口3000连接到容器的端口3000。

docker container run -p 3000:3000 notes:latest
Run Code Online (Sandbox Code Playgroud)

然后转到http:// localhost:3000 / -除非您使用的是Docker Toolbox,否则您将要使用http://192.168.99.100:3000/

我也建议EXPOSE 3000Dockerfile在中添加一个,因为这是一种很好的做法。

只是一个注释-该-p标志<host>:<container>用于格式。