我有 2 个 Windows 容器和 2 个 Linux 容器,我试图在 Docker 桌面上协同工作。我有单独的撰写文件,当我“撰写”两者时(使用介于两者之间的“切换到 Windows/Linux 容器...”),它们可以使用它们的内部 IP 地址进行通信得到了。 但是,当我尝试使用撰写文件的服务名称时,它们找不到彼此。
关于撰写文件的 networking:
部分,我已经尝试了任何我能想到的方法,以尝试将它们放在同一网络中:
external
default
和 external
(基本上,我尝试了所有提到的in this Stackoverflow question)
正如 this question 中所提到的,Windows 上下文似乎无法看到 Linux 上下文。如果一侧有网络 external
,您会收到网络未知的错误。如果两者都定义了相同的网络名称(不使用 external
),那么它们仍然看不到对方。
下面的两个示例撰写文件说明了这个问题。 linuxservice
和 nodered
无法引用 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
?
答案 0 :(得分:0)
当然,我发现一些东西至少在我发布问题后立即起作用。
按照建议使用 host.docker.internal:9340
至少可以避免使用 IP 地址。
我暂时不回答这个问题,以防万一有人知道如何让 Linux 和 Windows 网络看到彼此的服务。