docker - 访问 Docker 容器的 localhost
问题描述
我在 mac 上运行 docker,并试图在 docker 容器中为 angular 项目设置开发环境。
我的 docker-compose 设置目前如下所示:
version: '3.7'
services:
dev:
build:
context: .
dockerfile: "${DOCKERFILE_DIR}"
working_dir: "${CONTAINER_DIR}"
ports:
- "3000:4200"
- "3001:8080"
volumes:
- "nfsmount:${CONTAINER_DIR}"
tty: true
volumes:
nfsmount:
driver: local
driver_opts:
type: nfs
o: addr=host.docker.internal,rw,nolock,hard,nointr,nfsvers=3
device: ":/System/Volumes/Data/${SOURCE_DIR}"
问题是,当我ng serve
在 docker 容器内运行时,它服务于localhost:4200
docker 容器,而不是容器的暴露端口。这意味着端口映射"3000:4200"
不足以让我localhost:3000
从我的主机连接到localhost:4200
我的 docker 容器。
当然,一个简单的解决方案就是0.0.0.0:4200
通过使用来服务于我的 docker 容器ng serve --host 0.0.0.0
。但是,我试图尽可能地模仿我的开发环境,所以我想知道是否有任何其他方式可以连接localhost:4200
到0.0.0.0:4200
我的 docker 容器内部(或者更好的是,将localhost:3000
我的主机直接连接到localhost:4200
我的 docker 容器)。
任何帮助是极大的赞赏!
解决方案
除非您在容器内使用主机网络,否则这是不可能的。当你创建一个容器时,容器会获得它自己的网络命名空间。环回接口只能被运行在同一网络命名空间中的处理访问,即,只能在容器内的进程访问,因此不能从主机访问。
network_mode: "host"
您可以使用docker compose 中的参数在主机网络中运行它,而不是在单独的网络命名空间中运行容器。如果您坚持不绑定到容器内的 0.0.0.0,这应该适用于您的用例。- https://docs.docker.com/compose/compose-file/#network_mode
推荐阅读
- pandas - Pandas 累积和和多重分组依据
- r - 在 R 中,如何从数据框列表中的每个数据框中选择一组列?
- python - 如何在基于 Python 的 Web 应用程序中实现基于属性的访问控制?
- html - 自定义滚动条在 Chromium 和 Safari 中显示,但不是 Chrome
- java - 继承类返回继承类的类型
- pine-script - 如何在 PineScript 中读取 1 个指标的 2 个时间帧数据?
- laravel - Laravel PHP If/Else 在 Blade 中不起作用
- lua - 功能圈错误。错误的论点#1
- swift - 不会触发 MKMapView 顶部的 SwiftUI 按钮
- javascript - 在提交 Google 表单时获取 IP 地址