我有一个小型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"]
完成构建后,我能够正确地(我认为)创建一个图像。
>docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
notes latest e4ccada07b84 18 hours ago 846MB
然而,当我在图像上运行时,它会运行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.
我错过了什么让它在容器中正确运行?
答案 0 :(得分:4)
您的React应用程序设置为在容器和的端口3000上运行,因为您提到您要转到输出中的URL;我假设你正试图到达主机的端口3000。
将您的命令更改为以下内容;它会将主机的端口3000连接到容器的端口3000.
docker container run -p 3000:3000 notes:latest
然后转到http://localhost:3000/ - 除非您使用Docker Toolbox,否则您将要使用http://192.168.99.100:3000/
我还建议在EXPOSE 3000
中添加Dockerfile
,因为这是一种很好的做法。
只需注意 - -p
标记使用<host>:<container>
作为格式。