我在Mac上运行docker,并试图在docker容器中为角度项目设置开发环境。
我的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}"
问题是,当我在docker容器中运行ng serve
时,它服务于docker容器的localhost:4200
而不是容器的暴露端口。这意味着"3000:4200"
的端口映射不足以使我无法将localhost:3000
从主机连接到Docker容器的localhost:4200
。
当然,一个简单的解决方案是通过使用0.0.0.0:4200
来为我的Docker容器提供ng serve --host 0.0.0.0
服务。但是,我试图尽可能地模仿我的开发环境,所以我想知道是否还有其他方法可以将docker容器中的localhost:4200
连接到0.0.0.0:4200
(或者更好的方法是连接{{ 1}}的主机直接连接到docker容器的localhost:3000
。
非常感谢您的帮助!
答案 0 :(得分:0)
除非在容器内部使用主机网络,否则不可能。创建容器时,该容器将获得其自己的网络名称空间。环回接口只能由在同一网络名称空间中运行的处理访问,即仅容器内的进程可以访问,因此不能从主机访问。
您可以在docker compose中使用network_mode: "host"
参数在主机网络中运行容器,而不是在单独的网络名称空间中运行容器。如果您坚持不绑定到容器内部的0.0.0.0,则此方法适用于您的用例。 -https://docs.docker.com/compose/compose-file/#network_mode