簡體   English   中英

參考 Windows 容器的名稱來自 Docker 桌面中的 Linux 容器

[英]Reference Windows containers by name from Linux containers in Docker Desktop

我有 2 個 Windows 容器和 2 個 Linux 容器,我試圖在 Docker 桌面上一起工作。 我對兩者都有單獨的組合文件,當我“組合”兩者時(使用“切換到 Windows/Linux 容器...”),它們可以使用他們獲得的內部 IP 地址進行通信。 但是,當我嘗試使用撰寫文件的服務名稱時,它們找不到彼此。

關於networking:編寫文件的一部分,嘗試將它們放在同一個網絡中:

  • 在兩個撰寫文件中使用相同的網絡名稱
  • 在兩者中使用相同的網絡名稱,但聲明一個external
  • 自定義名稱,使用和不使用defaultexternal

(基本上,我嘗試了這個 Stackoverflow 問題中提到的所有內容)

正如這個問題中也提到的,Windows 上下文似乎無法看到 Linux 上下文。 如果一側有網絡external ,您會收到網絡未知的錯誤。 如果兩者都定義了相同的網絡名稱(不使用external ),那么它們仍然看不到對方。

下面的兩個示例撰寫文件說明了這個問題。 linuxservicenodered無法引用winservice ,但可以通過其內部 IP 地址訪問該容器。 nodered嘗試 localhost:9340 也不起作用,並導致“連接被拒絕”錯誤。

為我的 Linux 容器編寫文件:

version: "3.7"

services:
    linuxservice:
        image: myregistry/mycontainer:development
        ports: 
            - 8080:8080
    nodered:
        image: nodered/node-red
        ports: 
            - 1880:1880
        volumes:
            - 'C:/data/Docker/nr-volume:/data'

networks:
    default:
        name: docker-net

為我的 Windows 容器編寫文件:

version: '3.1'

services:
  windb:
    image: myregistry/olmysql:v2
    ports:
      - 3306:3306

  winservice:
    image: myregistry/connect:latest
    ports:
      - 9340:9340
    depends_on:
      - windb
  
networks: 
  default:
    name: docker-net

有什么辦法可以使這些容器通過名稱而不是 IP 地址進行通信? 假設沒有辦法將它們放在一個網絡中,是否有可能在兩個網絡中的任一網絡中創建某種 DNS? 或者有沒有辦法讓他們使用localhost:9340

當然,一旦我發布了問題,我就會發現至少可以工作的東西。

按照這里的建議使用host.docker.internal:9340至少可以避免使用 IP 地址。

我暫時保留這個問題,以防萬一有人知道如何讓 Linux 和 Windows 網絡看到彼此的服務。

暫無
暫無

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

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