docker - 无法从主机访问正在运行的 docker 容器(localhost :8081)

标签 docker vue.js

使用 Ubuntu。

基于本指南:

https://www.freecodecamp.org/news/how-to-use-routing-in-vue-js-to-create-a-better-user-experience-98d225bbcdd9/

我创建了一个最小的 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 命令,我希望可以从主机浏览器访问该应用程序:

http://localhost:8081/

但它只是给出以下错误:

enter image description here

当我从主机上使用 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

这意味着当我运行容器时,我可以在 localhost:8081 上的主机浏览器上访问 Web 应用程序

最佳答案

基于此:

https://github.com/webpack/webpack-dev-server/issues/547

和:

https://dev.to/azawakh/don-t-forget-to-give-host-0-0-0-0-to-the-startup-option-of-webpack-dev-server-using-docker-1483

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

关于docker - 无法从主机访问正在运行的 docker 容器(localhost :8081),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58719047/

相关文章:

docker - docker hub 私有(private)注册表中的 "PARALLEL BUILD"是什么?

amazon-web-services - 无法将图像推送到 Amazon ECR - 失败并显示 "no basic auth credentials"

vue.js - Nuxtjs - 在主机上部署生产版本需要哪些文件/文件夹

vue.js - 如何删除 vuetify 中列表项的填充

docker - Opensearch 端口 (9200) 表示没有证书,导致运行 Magento2 命令时出现错误 "No alive nodes found in your cluster"

nginx - 反向代理背后的 Gitlab Docker 容器

docker - 在 Kubernetes 中遇到端口转发的连接超时问题?

javascript - Vue 计算属性返回一个 promise ?

javascript vue 获取 JSON 值

javascript - 类型错误 : Cannot read property 'replace' of undefined - VueJS