簡體   English   中英

訪問 Docker 容器的 localhost

[英]Access localhost of Docker container

我正在 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}"

問題是,當我在 docker 容器內運行ng serve時,它服務於 docker 容器的localhost:4200而不是容器的暴露端口。 這意味着"3000:4200"的端口映射不足以讓我將localhost:3000從我的主機連接到我的 docker 容器的localhost:4200

當然,一個簡單的解決方案就是使用ng serve --host 0.0.0.0代替我的 docker 容器的0.0.0.0:4200 但是,我試圖盡可能地模仿我的開發環境,所以我想知道是否有任何其他方法可以將localhost:4200連接到我的 docker 容器內的0.0.0.0:4200 (或者更好的是,連接localhost:3000的我的主機直接到我的 docker 容器的localhost:4200 )。

任何幫助是極大的贊賞!

除非您在容器內使用主機網絡,否則這是不可能的。 當您創建容器時,容器會獲得自己的網絡命名空間。 只有在同一網絡命名空間中運行的進程才能訪問環回接口,即只能從容器內部的進程訪問,因此不能從主機訪問。

您可以使用 docker compose 中的network_mode: "host"參數在主機網絡中運行它,而不是在單獨的網絡命名空間中運行容器。 如果您堅持不綁定到容器內的 0.0.0.0,這應該適用於您的用例。 - https://docs.docker.com/compose/compose-file/#network_mode

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM