【问题标题】:Docker Container localhost not connectedDocker 容器本地主机未连接
【发布时间】:2020-01-20 00:03:31
【问题描述】:

我有一个 React 应用程序,它连接到我试图在 docker 容器中运行的 json 服务器。 Dockerfile如下:

# base image
FROM node:alpine

# set working directory
WORKDIR '/app'

# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH

# install and cache app dependencies
COPY package.json /app/package.json
RUN npm install --silent
RUN npm install react-scripts@3.0.1 -g --silent
RUN npm i serve
COPY . . 

# start app
CMD ["npm", "start"]
CMD ["node", "server.js"]
CMD ["serve", "-p", "3000", "-s", "."]

json服务器如下:

var jsonServer  = require('json-server')
var server      = jsonServer.create()
var router      = jsonServer.router(require('./db.js')())
var middlewares = jsonServer.defaults()

server.use(middlewares)
server.use(router)
server.listen(8080, function () {
console.log('JSON Server is running')
})

问题是当我跑步时 docker run -it -p 3000:3000 personal-react-website 它说我的应用程序正在http://localhost:3000 上运行,但是当我去那里时,它没有向我显示任何东西。 我想知道是否有人可以帮助我弄清楚为什么不是这样?

在我的测试环境中,我的 React 应用在端口 3000 上,而 json 服务器在 8080 上,我只需键入

npm start
node server.js

一切正常。

【问题讨论】:

  • 为什么容器中没有全局安装服务?

标签: node.js json reactjs docker npm


【解决方案1】:

由于 CMD 行为,您的 app servernpm start 从未被执行。

一个 Dockerfile 中只能有一个 CMD 指令。如果您列出多个 CMD,则只有最后一个 CMD 会生效。

所以你需要入口点来使用一些入口点来处理这个问题,或者你可以使用一些节点进程管理器来通过进程管理器启动所有应用程序。

或者,如果您想寻求一个简单的解决方案,那么您可以尝试

How can I run multiple npm scripts in parallel?

【讨论】:

  • 谢谢,我最终运行了 2 个带有 docker-compose 文件的容器。现在它在 192.168.99.100:3000 上运行,如果您不介意还有 1 个问题:我正在尝试连接到运行在 192.168.99.100:8080 上的我的 json 服务器,但有没有通用的连接方式?我读到您可以参考特定的容器名称,即 json_server:8080 或类似的东西
  • 是的,你提到了容器名称,这是最通用的方式,如果是链接或在同一个 docker compose 文件中
猜你喜欢
  • 2015-11-28
  • 1970-01-01
  • 2019-06-22
  • 2019-11-13
  • 1970-01-01
  • 2017-06-13
  • 1970-01-01
  • 2020-09-04
  • 2014-08-10
相关资源
最近更新 更多