docker - 无法从主机访问运行 docker 容器(本地主机:8081)
问题描述
使用 Ubuntu。
基于本指南:
我创建了一个具有以下项目结构的最小 vuejs 项目:
https://github.com/dev-samples/samples/tree/master/vuejs-001
frontend-router/
build/
config/
src/
static/
test/
build.sh
Dockerfile.dev
package-lock.json
package.json
在哪里:
Dockerfile.dev
FROM node:10
RUN apt install curl
RUN mkdir /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
# make the 'app' folder the current working directory before running npm install
WORKDIR /app
RUN npm install
CMD [ "npm", "run", "dev" ]
我正在构建图像并从该图像运行容器:
docker build -t frontend-router-image -f Dockerfile.dev .
docker rm -f frontend-router-container
docker run -it -p 8081:8080 -v ${PWD}:/app/ -v /app/node_modules --name frontend-router-container frontend-router-image
这使:
DONE Compiled successfully in 1738ms 3:49:45 PM
I Your application is running here: http://localhost:8080
由于我添加-p 8081:8080
到 docker run 命令,我希望我可以从我的主机浏览器访问应用程序:
但它只是给出以下错误:
当我使用主机上的 vanilla npm 运行它时,我工作得很好。但是,当它从 docker 容器内运行时,为什么我不能访问该应用程序?
源代码在这里:
https://github.com/dev-samples/samples/tree/master/vuejs-001
如下所示,我尝试过:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e011fb9e39e8 frontend-router-image "docker-entrypoint.s…" 12 seconds ago Up 9 seconds 0.0.0.0:8081->8080/tcp frontend-router-container
$ docker run -it --rm --net container:frontend-router-container nicolaka/netshoot ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:8080 0.0.0.0:*
为了比较这个项目工作正常:
https://github.com/dev-samples/samples/tree/master/vuejs-002
这意味着当我运行一个容器时,我可以在我的主机浏览器上访问 Web 应用程序localhost:8081
解决方案
基于此:
https://github.com/webpack/webpack-dev-server/issues/547
和:
https://pythonspeed.com/articles/docker-connection-refused/
如果我改变它会起作用:
host: 'localhost', // can be overwritten by process.env.HOST
到:
host: '0.0.0.0', // can be overwritten by process.env.HOST
在文件中:/frontend-router/config/index.js
推荐阅读
- azure - Azure 事件中心创建 1 个中心的问题
- c++ - glReadPixels() 不准确
- javascript - ChartJs 缩放插件增加了大数据集的 X 轴缩放
- c# - Linq在对象数组上搜索
- python - 如何显示 MyPy 在 PyDev/Eclipse 中运行的结果?
- python - 如何从父包或同级包中实现相对或绝对模块导入?
- javascript - 如果选择标签的“id”是动态的,我如何获取选择标签的所有值?
- mysql - 使用 MySQL / MariaDB 的 TypeORM 检查装饰器约束
- python - Python,如何创建以 windows 或 linux 样式开头的通用路径名?
- apache - Apache 如何决定使用哪个 LocationMatch?