gpt4 book ai didi

docker - 访问 Docker 容器的 localhost

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

我在 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:42000.0.0.0:4200在我的 docker 容器中(或者更好的是,将主机的 localhost:3000 直接连接到我的 docker 容器的 localhost:4200)。

任何帮助是极大的赞赏!

最佳答案

除非您在容器内使用主机网络,否则这是不可能的。当你创建一个容器时,容器会获得它自己的网络命名空间。环回接口(interface)只能由在同一网络命名空间中运行的处理访问,即仅容器内的进程,因此不能从主机访问。

您可以使用 network_mode: "host" 在主机网络中运行它,而不是在单独的网络命名空间中运行容器。 docker compose 中的参数。如果您坚持不绑定(bind)到容器内的 0.0.0.0,这应该适用于您的用例。 - https://docs.docker.com/compose/compose-file/#network_mode

关于docker - 访问 Docker 容器的 localhost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59583259/

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