我有一个nodejs/vue应用程序,我可以运行良好,直到我试图把它放在一个docker容器。我使用的项目结构如下:
当我这样做的时候
npm run dev
我得到输出:
listmymeds@1.0.0 dev /Users/.../projects/myproject
webpack-dev-server --inline --progress --config build/webpack.dev.conf.js
然后在给我消息之前,它构建了许多模块:
DONE Compiled successfully in 8119ms
I Your application is running here: http://localhost:8080
然后我可以在本地主机8080上通过浏览器连接
这是我的档案:
FROM node:9.11.2-alpine
RUN mkdir -p /app
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
CMD npm run dev
EXPOSE 8080
然后我用
docker build -t myproject .
并查看通过
docker images
然后我就跑
docker run -p 8080:8080 myproject
并得到一条消息,说明我的应用程序正在这里运行:localhost:8080
但是,当我使用浏览器或邮递员获取localhost:8080时,没有响应。
另外,当我从命令行运行容器时,它似乎锁定了,所以我必须关闭终端。不确定这是否相关…
更新:
我试着跟踪Docker日志,比如
Docker日志--跟踪
而且除了我的应用程序在本地主机上运行的最后一行之外,没有别的东西:8080
这似乎表明我的http请求从未进入我的容器,对吧?
我也尝试过这个建议
cmd node_modules/.bin/webpack开发服务器——主机0.0.0.0
但这一切都没有开始。
我突然想到,可能是Docker网络出了问题,可能是导致了之前在Kong API学习上的尝试。所以我跑
docker network ls
然后看看
NETWORK ID NAME DRIVER SCOPE
1f11e97987db bridge bridge local
73e3a7ce36eb host host local
423ab7feaa3c none null local
我无法停止、断开或删除这些网络中的任何一个。我想“桥”可能是一个孔创造的,但它不会让我打击它。没有其他容器在运行,我已经删除了除我在这里使用的图像以外的所有图像。
回答
结果发现我的config/index.js中有这个:
module.exports = {
dev: {
// Various Dev Server settings
host: 'localhost',
port: 8080,
根据joachim schirrmacher的出色帮助,我将主机从localhost更改为0.0.0.0,这允许容器接收来自主机的请求。