我已经克隆了这个项目:
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主机上的端口。这里有些例子。
那么,为什么它的工作原理(从访问我的主机浏览器的Web应用程序),而无需添加如-p 8080:8080
到docker run
?
一切都很好。要访问您所使用的网站,该网站172.17.0.2
属于初始Docker bridge
网络172.17.0.0/16
。如果您不指定任何其他网络,则它是在其中创建所有容器的基本网络。
由于bridge
是在主机上创建的网络,因此您可以使用直接ip地址自由访问它。但是,如果您尝试通过访问Vue应用程序,localhost:8080
否则127.0.0.1:8080
您将无法连接,因为您使用的是其他网络。添加后-p 8080:8080
,行为应更改,并且可以通过本地主机访问应用程序。
基本上,Docker文档中的“外部世界”是指超出分配给容器的网络的网络,因此,在您的情况下,“外部世界”不过是什么172.17.0.0/16
。
您可以在此处阅读有关容器通信的更多信息: