Docker 化 React 应用程序:应用程序在容器内启动,但无法从公开的端口访问它

eri*_*mon 6 node.js docker reactjs docker-compose

这是专门针对教程的问题:http://mherman.org/blog/2017/12/07/dockerizing-a-react-app/#.Wv3u23WUthF 作者: Michael Herman

\n\n

问题:应用程序在容器内启动,但无法从我刚刚公开的端口访问它-p 3000:3000。当浏览时localhost:3000出现此站点可以\xe2\x80\x99t错误

\n\n

docker-compose.yaml

\n\n
version: \'3.5\'\n\nservices:\n\n  sample-app:\n    container_name: sample-app\n    build:\n      context: .\n      dockerfile: Dockerfile\n    volumes:\n      - \'.:/usr/src/app\'\n      - \'/usr/src/app/node_modules\'\n    ports:\n      - \'3000:3000\'\n    environment:\n      - NODE_ENV=development\n
Run Code Online (Sandbox Code Playgroud)\n\n

Dockerfile

\n\n
# base image\nFROM node:9.6.1\n\n# set working directory\nRUN mkdir /usr/src/app\nWORKDIR /usr/src/app\n\n# add `/usr/src/app/node_modules/.bin` to $PATH\nENV PATH /usr/src/app/node_modules/.bin:$PATH\n\n# install and cache app dependencies\nCOPY package.json /usr/src/app/package.json\nRUN npm install --silent\n# RUN npm install react-scripts@1.1.1 -g --silent # Uncomment to silent logs\nRUN npm install react-scripts@1.1.1 -g \n\n# start app\nCMD ["npm", "start"]\n\n#CMD tail -f /usr/src/app/README.md\n\n\n###################################\n# To Run sample app:\n# docker run -it -v ${PWD}:/usr/src/app -v /usr/src/app/node_modules -p 3000:3000 --rm sample-app\n
Run Code Online (Sandbox Code Playgroud)\n\n

Docker 日志https://docs.google.com/document/d/14LRCgjMLAkmdMiuedxAW2GWUAtxmWeJQCNQB2ezdYXs/edit

\n\n

运行组合容器或单个容器后。显示启动成功,但此后什么也没有。

\n\n

当我 docker exec 进入容器时,$ curl localhost:3000返回正确的 index.html 页面

\n\n

我使用以下任一方法启动容器:

\n\n
$ docker run -it -v ${PWD}:/usr/src/app -v /usr/src/app/node_modules -p 3000:3000 --rm sample-app\n
Run Code Online (Sandbox Code Playgroud)\n\n

<-(图像sample-app存在)

\n\n

或者

\n\n
$ docker-compose up\n
Run Code Online (Sandbox Code Playgroud)\n

Leo*_*las 5

消除所有其他因素后,我假设您的应用程序正在本地主机上侦听。本地主机的范围仅限于容器本身。因此,为了能够连接到它,您必须位于容器内部。

要解决此问题,您需要让应用程序侦听 0.0.0.0。