gpt4 book ai didi

docker - 可以从主机访问 docker 容器,但这应该不可能吗?

转载 作者:行者123 更新时间:2023-12-02 04:01:44 25 4
gpt4 key购买 nike

我已经克隆了这个项目:

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}

它构建并成功运行:

enter image description here

我可以在我的主机浏览器上访问它:

enter image description here

这一切都很好,除了我期望我可以根据以下方式从我的主机浏览器访问:

https://docs.docker.com/config/containers/container-networking/

默认情况下,当您创建容器时,它不会向外界发布任何端口。要使端口可供 Docker 外部的服务或未连接到容器网络的 Docker 容器使用,请使用 --publish 或 -p 标志。这将创建一条防火墙规则,将容器端口映射到 Docker 主机上的端口。以下是一些示例。

那么为什么它可以工作(从我的主机浏览器访问网络应用程序)而不添加例如-p 8080:8080docker run??

最佳答案

一切正常。要访问您使用的网站 172.17.0.2,它属于初始 Docker bridge 网络 172.17.0.0/16。这是一个基本网络,如果您不指定任何其他网络,则将在其中创建所有容器。

因为bridge是在您的主机上创建的网络,您可以使用直接IP地址自由访问它。但是,如果您尝试通过 localhost:8080127.0.0.1:8080 访问 Vue 应用程序,您应该无法连接,因为您使用的是不同的网络。添加 -p 8080:8080 后,行为应该发生变化,并且可以通过本地主机访问应用程序。

基本上,Docker 文档中的“外部世界”意味着分配给容器的网络之外的网络,因此在您的情况下,“外部世界”绝非 172.17.0.0/16

您可以阅读有关容器通信的更多信息 here .

关于docker - 可以从主机访问 docker 容器,但这应该不可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58574884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com