我已经克隆了这个项目:
https://github.com/andfanilo/vue-hello-world
并为其创建了一个dockerfile:
FROM node:10
RUN apt install curl
# make the 'app' folder the current working directory
RUN mkdir /app
# copy project files and folders to the current working directory (i.e. 'app' folder)
COPY . /app
WORKDIR /app
RUN npm install
CMD [ "npm", "run", "serve" ]
我使用以下命令构建并运行它:
FRONTEND_IMAGE='frontend-simple-image'
FRONTEND_CONTAINER_NAME='frontend-simple-container'
docker build -t ${FRONTEND_IMAGE} .
docker rm -f ${FRONTEND_CONTAINER_NAME}
docker run -it --name ${FRONTEND_CONTAINER_NAME} ${FRONTEND_IMAGE}
它可以成功构建并运行:
我可以在主机浏览器上访问它:
除了我不会期望我可以根据以下条件从主机浏览器访问之外,这一切都很好:
https://docs.docker.com/config/containers/container-networking/
默认情况下,创建容器时,它不会将其任何端口发布到外界。要使端口可用于Docker外部的服务或未连接到容器网络的Docker容器,请使用--publish或-p标志。这将创建一个防火墙规则,该规则将容器端口映射到Docker主机上的端口。这是一些示例。
那么为什么不添加-p 8080:8080
到docker run
上就可以工作(从我的主机浏览器访问Web应用程序)?
答案 0 :(得分:5)
一切正常。要访问该网站,您正在使用172.17.0.2
,它属于最初的Docker bridge
网络172.17.0.0/16
。如果您不指定任何其他网络,则它是在其中创建所有容器的基本网络。
由于bridge
是在主机上创建的网络,因此您可以使用直接ip地址自由访问它。但是,如果您尝试通过localhost:8080
或127.0.0.1:8080
访问Vue应用程序,则您将无法连接,因为您使用的是其他网络。添加-p 8080:8080
后,行为应会更改,并且可以通过本地主机访问应用程序。
基本上,Docker文档中的“外部世界”是指分配给容器的网络之外的网络,因此在您的情况下,“外部世界”除172.17.0.0/16
外都是其他东西。
您是否可以阅读有关容器通信here的更多信息: