首页 > 解决方案 > 无法从主机访问运行 docker 容器(本地主机:8081)

问题描述

使用 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/

但它只是给出以下错误:

在此处输入图像描述

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

标签: dockervue.js

解决方案


基于此:

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


推荐阅读