访问Docker容器的本地主机

时间:2020-01-03 18:03:09

标签: docker

我在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

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

除非在容器内部使用主机网络,否则不可能。创建容器时,该容器将获得其自己的网络名称空间。环回接口只能由在同一网络名称空间中运行的处理访问,即仅容器内的进程可以访问,因此不能从主机访问。

您可以在docker compose中使用network_mode: "host"参数在主机网络中运行容器,而不是在单独的网络名称空间中运行容器。如果您坚持不绑定到容器内部的0.0.0.0,则此方法适用于您的用例。 -https://docs.docker.com/compose/compose-file/#network_mode